рандомный угол ? + Vector3 (Random.Range... или есть запись покрасивее ?
https://docs.unity3d.com/ScriptReference/Random-rotation.html И умножаешь на вектор
ну это ж совсем рандом. а мне в пределах диапазона надо )
так как сумма двух векторов дает нам новый вектор - ты можешь просто взять рандом циркл в плоскости перпендикулярной твоему вектору, сложить их и получишь "чуть-чуть" отклонившийся вектор (не забудь нормализовать
Затуп не прошел ) скрипт стрельбы взял готовый и не могу понять как прикрутить туда рассеивание По идее это вот тут if (Physics.Raycast(fireSourcePosition, fireSource.forward , out RaycastHit hitInfo, maxQueryDistance)) { Пробовал вот так Vector3 randomSpread = new Vector3(0, 0, Random.Range(-1f, 1f)); if (Physics.Raycast(fireSourcePosition, fireSource.forward + randomSpread, out RaycastHit hitInfo, maxQueryDistance)) Но чет не то ) рассеивание нет. вообще не то кручу ?
на пастбин выложи. И да, это не так работает
https://pastebin.com/Sy1biwkM
тип того ) да
у тебя есть собственный форвард, который ты используешь для направления. Кватернион ротейшена (1) даст тебе преобразование вектора, который генерит рандом на это направление. В результате ты получишь вектор перпендикулярный направлению форвард трансформа. Сложив эти вектора ты получишь новый вектор, за разброс будет отвечать длина этого второго вектора (2) . Нормализовав результат - получишь единичный вектор направления. В дебаге нужна длина для отрисовки вектора, поэтому я там вставил цифирь. У тебя в рейкасте есть длина, тебе это не нужно. Можешь анимировать спред (2) от зажатия, если хочешь чтоб разброс зависил от того, как долго ты не отпускаешь кнопку огня
как всегда прекрасный пример, спасибо. но почему в исходном скрипте оно не работает (все как летело в одну точку так и летит) ? spreadValue = 0.5f; var directionRnd = fireSource.forward + (fireSource.rotation * Random.insideUnitCircle) * spreadValue; if (Physics.Raycast(fireSourcePosition, directionRnd , out RaycastHit hitInfo, maxQueryDistance)) fireSource - это трансформ камеры по факту может я что-то простое упускаю и не там редактирую логику ?
спред вэлью это длина вектора. Ты подбери для своих настроек какую надо. Мб 0.5f у тебя это очень мало, я не знаю. Вынеси в поле и покрути туда-сюда. Ну и отдельный вопрос - как ты узнал, что в точку летит?
эффект висит на вылетающем снаряде (через N секунд он взрывается с дымком в воздухе) - в принципе в логике на силу наконец разобрался. там отдельный кусок логики на попадание в какую нибудь стену. без которого я могу обойтись. Вот так теперь работает. В который раз убеждаюсь что готовый код в котором я не соображаю не ускоряет разработку ))
вот с рейкастом по чему-то, пожалуйста
Обсуждают сегодня