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

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

13 ответов

35 просмотров

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

Даня-фидер Автор вопроса
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, но лучше конечно как Александр написал)

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта