首页 > 解决方案 > 如何使刚体“look_at”成为另一个空间

问题描述

我正在使用 RigidBody 作为播放器,并且我有一个相机作为 RigidBody 的孩子。玩家应始终注视另一个空间(玩家 2)。当使用 kinematicBody 时,函数 look_at() 完成了这项工作,但是 godot 文档中建议的函数 look_follow() 并没有完全 360 度跟随对象。

这是我到目前为止所拥有的:

extends RigidBody

func _ready():
    Player2 = get_node("/root/Level/Player2")

func look_follow_x(state, current_transform, target_position):
    var up_dir = Vector3(0, 1, 0)
    var cur_dir = current_transform.basis.xform(Vector3(0, 0, 1))
    var target_dir = (target_position - current_transform.origin).normalized()
    var rotation_angle = acos(cur_dir.x) - acos(-target_dir.x)

    state.set_angular_velocity(up_dir * (rotation_angle / state.get_step()))

func _integrate_forces(state):


    var target = Player2.get_transform().origin
    look_follow_x(state, get_global_transform(), target)

现在,当我使用 apply_impulse 移动“玩家”时,它会在 X 轴的一侧跟随另一个玩家 180 度,而对于其他 180 度,它会反转旋转。我看不出这是怎么回事,因此不知道如何解决。

那么我如何让玩家从每个位置(360 度)看第二个玩家?

标签: 3dcamerarotationfocusgodot

解决方案


推荐阅读