3d Godot-三维移动和滑动中的局部方向

3d Godot-三维移动和滑动中的局部方向,3d,godot,3d,Godot,我正试图通过使用运动学体移动和滑动来制作十字线(它将通过鼠标和游戏板输入来移动,还有另一个美观的原因)。我的角色节点由PathFollow节点移动(就像在rail Shotter游戏中一样),我的十字线节点使用以下代码: var path_rot = get_parent().get_global_transform().basis.get_euler() #Crosshire is child of character node direction = Vector3(xloc.x, -xlo

我正试图通过使用运动学体
移动和滑动来制作十字线(它将通过鼠标和游戏板输入来移动,还有另一个美观的原因)。我的角色节点由PathFollow节点移动(就像在rail Shotter游戏中一样),我的十字线节点使用以下代码:

var path_rot = get_parent().get_global_transform().basis.get_euler() #Crosshire is child of character node
direction = Vector3(xloc.x, -xloc.y, 0).rotated(Vector3.UP, path_rot.y) #xloc stores Vector2 mouse input
move_and_slide(direction * mouse_speed)
self.translation.z = 0
xloc = lerp(xloc, Vector2(0, 0), 0.4)
据我所知,当角色节点绕X轴旋转时,我的十字线仍然朝前(因为
方向
向量),看起来就像垂直于地面上下移动的十字线。所以我还需要通过X轴纠正向量的旋转方向

我尝试使用这一行,但没有帮助(我认为键入2
.rotated()
方法实际上不是正确的方法,但我可能错了),我还尝试按正确的顺序更改Euler angels的
.rotated()
,但没有给出任何区别

Vector3(xloc.x, -xloc.y, 0).rotated(Vector3.UP, path_rot.y).rotated(Vector3.RIGHT, path_rot.x)
如果有更好的方法使move_和_滑动面朝向局部方向,我将很高兴地将所有这些无意义的纠正更改为更简单或更好的优化解决方案。我还尝试使用
get\u global\u transform().basis.y
作为
rotation()
方法中的轴,希望它能够捕捉方向上的变化,但它似乎不是这样工作的,它只是不移动

更新:

我通过将旋转参考节点(
path_rot
)更改为摄影机节点修复了该问题,摄影机节点也连接到主要角色节点,并且出于某种原因,它开始按预期工作。我最终使用variant和2
.rotated()
方法,我不太喜欢它,但至少现在还可以

direction = Vector3(xloc.x, -xloc.y, 0).rotated(Vector3(1, 0, 0), path_rot.x).rotated(Vector3(0, 1, 0), path_rot.y)
另外,我认为最好在
移动和滑动中应用旋转,或者在之前一步,这样你就可以用方向向量做其他事情,比如位置限制或其他事情