Как повернуть вектор направления движения тела, чтобы он соответствовал направлению

камеры?

15 ответов

59 просмотров

Взять вектор направления камеры, умножить его на длину вектора велосити, теперь это новая велосити.

Лёва- Автор вопроса
Лёва
target_velocity *= $SpringArm3D.rotation типа тако...

типа velocity = velocity.length() * camera.direction - только я не в курсе, как именно там в тридэ для этого называются функции, тем более в четвёрке.

В смысле повернуть объект в сторону точки, используя torque_force? Напомни через пару часов, как к компу подойду - скину код.

func move_distance(V0 : float, Vmax : float, A : float, S : float, dt : float): if absf(V0) > Vmax: return signf(V0) * maxf(Vmax, absf(V0) - A * dt) var s_a = (3 * Vmax - V0) * Vmax / A if S < s_a: var v1 = (V0 - sqrt(V0**2 + 12*S*A)) / (2*A) var vt = minf(absf(v1), Vmax) var v = V0 if !is_equal_approx(v, vt): return minf(vt, v + A * dt) if !is_zero_approx(v): return maxf(v - A * dt, 0) else: var v = V0 var s_a_stop = 2 * Vmax * Vmax / A if S > s_a_stop: if !is_equal_approx(v, Vmax): return minf(Vmax, v + A * dt) return Vmax if !is_zero_approx(v): return maxf(v - A * dt, 0) return 0 # дёргать вот так var angle_diff = wrapf(global_position.angle_to_point(get_global_mouse_position()) - rotation, -PI, PI) var _angular_velocity = sign(angle_diff) * move_distance(sign(angle_diff) * angular_velocity, angular_speed_max, angular_acceleration, absf(angle_diff), delta) apply_impulse(_angular_velocity * mass)

Лёва- Автор вопроса
Александр
func move_distance(V0 : float, Vmax : float, A : f...

Спасибо большое. А чего так сложно?

Лёва
Спасибо большое. А чего так сложно?

Лёва (0) повысил карму Александр (8)

Лёва
Спасибо большое. А чего так сложно?

Длинно? Чтобы не переопределять скорость и реалистично улететь от пощёчины. И чтобы наиболее быстро попасть в конечную точку, не осциллируя (болтаясь) вокруг конечной точки.

В 3D для CharacterBody достаточно задавать вектор с помощью базиса, и игрок будет ходить в сторону направления взгляда. var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()

Danila Yanchuk
В 3D для CharacterBody достаточно задавать вектор ...

А инерцию легко симулировать с помощью постоянного сбавления скорости до нуля с определенной скоростью

Danila Yanchuk
А инерцию легко симулировать с помощью постоянного...

Ага, вот только на последнем этапе if absf(distance < max_velocity * delta) : velocity = 0 при вращении за курсором получается баг, когда объект крутится куда быстрее max_velocity И этот баг не лечится нормально, только окостыливается. Лучшее решение без ускорений - lerp_angle

Лёва- Автор вопроса
Лёва
А откуда transform берётся?

Из Node3D и ее наследников

Лёва- Автор вопроса
Danila Yanchuk
Из Node3D и ее наследников

func _physics_process(delta): var direction = (Vector3( Input.get_action_strength("move_right") - Input.get_action_strength("move_left"), 0, Input.get_action_strength("move_back") - Input.get_action_strength("move_forward") ) * $SpringArm3D.transform.basis).normalized() Пока пытаюсь сделать так, но это не работает

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

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

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Как думаете через какой сервис они верифицируют?
inc.
5
Добрый день! Подскажите, каким сборщиком фронта для OctoberCMS кто пользуется? Я имею ввиду сборщики, с которыми можно работать по стандартной схеме директорий октября. Я испо...
Николай Афанасенко
2
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
На чём в основном щас пишут мини апы? Vuejs?
Goot evening Not everyone
6
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
🙋 Ребята, всем привет. Поправил задачу: Нужно каждому новому сообщению (1 раз по каждому юзеру) в чате прибавлять снизу кнопку с предложением подписаться на канал. Как добавит...
Alexander
1
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
Карта сайта