3d - 如何使刚体“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 度)看第二个玩家?
解决方案
推荐阅读
- bash - bash - 从列表中选择一个数字并打印特定的输出
- java - Listview 项目删除方法不起作用
- javascript - 有没有办法将变量作为 HTML 中的值?
- raspberry-pi - GPIO.IN 是否需要链接到 RPi.GPIO 中的 GPIO.OUT 才能正常工作?
- ansible - "msg": "(uri) 模块不支持的参数
- android - 自定义 POI 数据到谷歌地图
- python - pandas.DataFrame.plot 创建具有双轴和不均匀索引的不正确图
- java - 从 Postman 发送选项时会触发 web.xml 中的 Tomcat 过滤器,但从浏览器或 curl 发送选项时不会触发
- php - XAMPP Subdomain with Joomla Site
- excel - Excel中的数字格式