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

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

13 ответов

27 просмотров

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

Даня-фидер Автор вопроса
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
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Карта сайта