Подскажите, как правильно сделать выстрел в пустоту? Когда оружие стреляет,

то оно спавнит линию, которая идет от персонажа до точки попадания, если рейкаст попадает, то все нормально, но если я буду стрелять в "небо", то линия будет странно спавнится. Как это пофиксить? Вот код: https://pastebin.com/5NuPNSUH

13 ответов

8 просмотров

Точка попадания не нужна. Достаточно получить точку старта и поворот ствола — это и будет луч.

Даня-фидер Автор вопроса
Alexander Pluzhnikov
Точка попадания не нужна. Достаточно получить точк...

Этот луч не должен проходить сквозь объекты и должен останавливаться при попадании

Не очень понял, как это применить к видосу выше. Луч у тебя не проходит сквозь объекты

Даня-фидер Автор вопроса

Я говорю про линию, которую я спавню, а не про луч который рейкаст делает

Даня-фидер Автор вопроса
Alexander Pluzhnikov
Не очень понял, как это применить к видосу выше. Л...

Правильно, потому что позиция LineRenderer'а начинается в точке спавна, а заканчивается в точке попадания

Даня фидер
Правильно, потому что позиция LineRenderer'а начин...

Ну вот. А в случае бесконечности ты получишь направление вектора, умножаешь на его длину и получишь координату крайней точки в пространстве.

Может надо при не попадании не умножать дистанцию на стартовую позицию, а прибавлять? shootLine.Construct(linePos, linePos + data.range);

Даня-фидер Автор вопроса

первое что бросается в глаза, это то что у тебя старт идёт из камеры а не из орудия а так я думаю проблемма заключается где то в данном участке кода ShootLine shootLine = Instantiate(hitVfxData.shootLine); shootLine.Construct(linePos, linePos * data.range); Ты как то возможно не верно определяешь конечную точку Вот что мне предложил чат гпт using System; using UnityEngine; namespace VOne.Project.Scripts { public class Weapon : MonoBehaviour { public WeaponData data; public HitVfxData hitVfxData; private float nextTimeForFire = 0f; private void Update() { if (Input.GetButtonDown("Fire1") && CanShoot()) { Shoot(); } } private bool CanShoot() { if (Time.time >= nextTimeForFire) { nextTimeForFire = Time.time + 1f / data.rate; return true; } return false; } private void Shoot() { var ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0)); var linePos = transform.position; if (Physics.Raycast(ray, out var hit, data.range, data.layer)) { HandleHit(hit, linePos); } else { // Если луч не столкнулся с объектом, рисуем линию на максимальное расстояние Vector3 endPoint = ray.GetPoint(data.range); DrawLine(linePos, endPoint); } } private void HandleHit(RaycastHit hit, Vector3 linePos) { DrawLine(linePos, hit.point); if (hit.transform.TryGetComponent(out Hitable hitable)) { switch (hitable.type) { case ObjectType.Enemy: // Обработка попадания во врага break; case ObjectType.Wood: // Обработка попадания в дерево break; case ObjectType.Sand: // Обработка попадания в песок break; case ObjectType.Metal: // Обработка попадания в металл break; case ObjectType.Rock: // Обработка попадания в камень break; default: throw new ArgumentOutOfRangeException(); } } } private void DrawLine(Vector3 start, Vector3 end) { // Создать объект линии или пули и отобразить его между start и end } } }

Даня фидер
Нельзя вектор на число умножить

Ну тогда создавать новый вектор, прибавляя linePos.x/y/z range, но лучше конечно как Александр написал)

Даня-фидер Автор вопроса

Похожие вопросы

Обсуждают сегодня

Всем привет) Я попробовал турбо роутер октябрьский. Вроде доволен, но возникла проблемка) Бутстраповские модалки плодят .modal-backdrop элементы Если модалка открыта, должне...
Виталий
3
Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Я тебе про общие вопросы, а не про узконаправленные . Ты че будешь в чате спрашивать как хтмл разметку сделать?!
rusteg
3
Как удалить health check в Consul? Казалось бы, это должно быть не сложно, но я не могу найти в документации ничего про это, только про добавление service с health check "в н...
Roman
2
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Privet! Mozhet jesti ideji - nemogu sdelatj upload backup s filestore cerez WEB. Fail okolo 450mb, eto mozhet bitj prichinoi? Nemogu ponjatj..kak zagruzitj backup... Poluchaju...
Matiss 🤘 Black Oak IT 🌳 Batumi 🌴 Latvija
5
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Хотя вроде админка показывает удаленные модели, да? @dblackCat
Виталий
2
Нужно магазин с тильды на опен кат перенести Есть кто умеет? В лс
Magic
8
Карта сайта