Применить силу к объекту относительно направления другогоC#

Место общения программистов C#
Ответить
Anonymous
 Применить силу к объекту относительно направления другого

Сообщение Anonymous »

Я делаю игру в жанре fps, и поэтому стрейфинг важен. Я пытаюсь заставить игрока двигаться относительно того места, куда он смотрит в игре.
У меня есть 3 Vector3: moveDir, LookDir и ForceDir. moveDir — это вектор движения (т. е. нажатие D (вправо) устанавливает для Z в moveDir значение 1, W (вперед) устанавливает значение X на 1 и т. д.). `lookDir` — это направление, в котором смотрит игрок, сплющенное, чтобы учитывать только поворот по оси y. А ForceDir — это векторная сила, которая будет применена.
Я пробовал различные методы комбинирования перемещения и просмотра Dir, чтобы установить ForceDir (умножение перемещения и просмотра В первую очередь Dirs), но это дало странные результаты.
Грубо нарисованное изображение моих желаемых и фактических движений игрока.
Изображение

Если бы я держал W (вперед), я бы ожидал двигаться в направлении игрока смотрит, удерживая A (влево). Я ожидаю, что он будет двигаться перпендикулярно влево в направлении, в котором смотрит игрок. вместо этого он применяет эти силы только относительно мирового пространства или, что еще более странно, когда я смотрю вниз по плоскостям X или Z.
Блок кода для контекста: (он запускается в каждом кадре)
private void MovePlayer()
{
//above I have it so inputs are handled (fore & backwards motion is handled in walkY, strafing in walkX)
walkX = Mathf.Clamp(walkX, -1.42f, 1.42f); walkY = Mathf.Clamp(walkY, -1.42f, 1.42f);
walkDir = new Vector3(walkY, 0, walkX);
walkX *= 0.7f; walkY *= 0.7f;
walkX = (walkX >= 0.001f || walkX = 0.001f || walkY

Подробнее здесь: https://stackoverflow.com/questions/783 ... of-another
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»