7

我想知道是否有办法在 godot 3d 中获取空间节点的前向向量。

统一起来,这只是transform.forward。

Godot 给了我一个旋转向量,但我不确定如何将其转换为方向向量。

godot 的 transform.forward 版本是什么?

4

6 回答 6

3

前锋是你决定的。我通常这样做:

var aim = $Player.get_global_transform().basis
var forward = -aim.z
var backward = aim.z
var left = -aim.x
var right = aim.x

当然,如果您在设计资产和场景时对此有一个约定,它会有所帮助。我总是使用 -Z 作为转发,但如果你愿意,你可以选择不同的。

于 2019-10-09T20:23:58.383 回答
2

我解决了我的问题get_global_transform().basis.z

于 2018-01-25T14:51:50.653 回答
1

SanzioSan 使用 basic.z 向量是正确的,但他解释得不够好。本质上,这是一个非常简单的问题。

如果您尝试在 3d 中拖动对象或拥有一个对象并希望它跟随您的屏幕,您可以使用类似于此的代码

var transform_hold_obj = node_to_hold_obj.get_global_transform()
transform_hold_obj.origin = transform_hold_obj.origin - transform_hold_obj.basis.z * some_distance_between_you_and_object
obj_being_dragged.set_transform(transform_hold_obj)

在我的例子中,transform_hold_obj 来自我的相机节点。我想要一些我选择的对象来跟随我的相机。此代码位于连接到被拖动对象的一些脚本中。base.z 向量是我的前向向量或我的相机指向的方向。

于 2020-04-19T20:50:12.403 回答
0

使用transform.basis.z是因为: https ://docs.godotengine.org/en/stable/tutorials/3d/using_transforms.html#obtaining-information

于 2021-04-23T06:44:15.073 回答
0

我知道这有点晚了,但我提出了建立自己的前锋并离开 Vector 的解决方案。它在 c# 中,但应该很容易转换为 GDScript。希望它可以帮助某人。

Vector3 forward = new Vector3(-(float)Math.Sin(Rotation.y), 0, -(float)Math.Cos(Rotation.y));

Vector3 left = new Vector3((float)Math.Sin(Rotation.y - Math.PI/2), 0, 
(float)Math.Cos(Rotation.y - Math.PI/2));
于 2021-03-20T18:51:49.937 回答
-1

它与 Vector3.FORWARD 有什么关系?

在此处输入图像描述

    transform.position += Vector3.forward * Time.deltaTime;
于 2020-05-06T02:35:37.743 回答