Код: Выделить всё
func _orient_character_to_direction(direction: Vector3, delta: float) -> void:
var left_axis = -local_gravity.cross(direction)
var rotation_basis := Basis(left_axis, -local_gravity, direction).orthonormalized()
_model.transform.basis = _model.transform.basis.get_rotation_quaternion().slerp(rotation_basis, delta * rotation_speed)
К моему большому замешательству, несмотря на то, что этот код написан на GDScript, я получаю эту ошибку:
E 0:00:00:0458 testplayer.gd:50 @ _orient_character_to_direction(): Базис [X: (0, 0, 0), Y: (0, 0, 0), Z: (0, 0, 0)] должен быть нормализован, чтобы его можно было привести к кватерниону. Используйте get_rotation_quaternion() или вызовите ortnormalized(), если базис содержит линейно независимые векторы.
Условие "!is_rotation()" истинно. Возврат: Quaternion()
core/math/basis.cpp:725 @ get_quaternion()
testplayer.gd:50 @ _orient_character_to_direction()
testplayer.gd:25 @ _integrate_forces ()
Из-за этой ошибки я попытался позвонить orthnormalized() на обоих концах назначения _model.transform.basis = _model.transform.basis.get_rotation_quaternion().slerp(rotation_basis, delta * Rotation_speed), но это был либо недопустимый вызов ( используя его после кватерниона) или он ничего не делал и ошибка сохранялась, в зависимости от того, где я его вызывал (пробовал везде, даже там, где это не имело смысла). Я также безуспешно пытался вызвать Normalized() для кватерниона.
Урок, которому я следую, можно найти здесь с конкретной функцией с ошибкой 2: 49.
Примечание. Я не силен в математике и впервые использую кватернионы, поэтому, если это очень простая ошибка, прошу прощения.
Подробнее здесь: https://stackoverflow.com/questions/791 ... quaternion
Мобильная версия