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

камеры?

15 ответов

65 просмотров

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

Лёва- Автор вопроса
Лёва
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() Пока пытаюсь сделать так, но это не работает

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
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
Карта сайта