英文:
How Can I Get The Global Position Of A Node3D In Godot 4.0?
问题
Node3D.global_position() 和 Node3D.global_translate() 是两个可以用来设置节点在全局坐标系下位置的方法。你可以尝试使用它们来实现你的目标。
英文:
I want to position one node to another, but they are under different parent nodes. How can I set one of the node's position to the other's, without interfering with the parent nodes' positions? Btw, the node3d with the position i'm trying to find has a random position
i've tried Node3D.global_position() and Node3D.global_translate (AI told me to try it). I know how to set global position, just not find it.
答案1
得分: 0
In Godot 3 对于 Spatial
,您会使用 node.global_transform.origin
,在 Godot 4 中对于 Node3D
仍然适用。
然而,在 Godot 4 中,您现在可以使用 node.global_position
来操作 Node3D
,这使其与 Node2D
保持一致。
关于 global_position
的官方文档表示:
该节点的全局位置。这等同于 global_transform.origin
global_transform.origin
和 global_position
都是属性,您可以获取:
prints(node.global_transform.origin, node.global_position)
或者设置:
node.global_transform.origin = Vector3.ZERO
node.global_position = Vector3.ZERO
显然,您尝试将其用作方法 Node3D.global_position()
(因为您添加了括号,它会尝试调用它,但实际上它不是可调用的,因为它是 Vector3
而不是 Callable
)。
还有 Node3D.global_translate
,显然您尝试将其用作属性...它实际上是一个方法,您可以使用它来移动 Node3D
。
关于 global_translate
的文档表示:
使用 Vector3 偏移移动全局(世界)变换。偏移量是在全局坐标系中的。
您可以像这样使用它:
node.global_translate(some_offset)
这相当于:
node.global_position += some_offset
这相当于:
node.global_transform.origin += some_offset
这相当于:
node.global_transform.origin = node.global_transform.origin + some_offset
英文:
In Godot 3 for Spatial
you would do node.global_transform.origin
, and this continues to work in Godot 4 for Node3D
.
However, in Godot 4 you can now use node.global_position
for Node3D
which brings it in line with Node2D
.
The official documentation for global_position
says
> Global position of this node. This is equivalent to global_transform.origin
Both global_transform.origin
and global_position
are properties, that you can get:
prints(node.global_transform.origin, node.global_position)
Or set:
node.global_transform.origin = Vector3.ZERO
node.global_position = Vector3.ZERO
Apparently you were trying to use it as a method Node3D.global_position()
(since you added parenthesis, it would be trying to call it, which it can't since it is a Vector3
not a Callable
).
And also Node3D.global_translate
which apparently you tried to use as a property... Well, it is a method which you can use to move the Node3D
.
The documentation on global_translate
says:
> Moves the global (world) transformation by Vector3 offset. The offset is in global coordinate system.
You would use it like this:
node.global_translate(some_offset)
Which is equivalent to:
node.global_position += some_offset
Which is equivalent to:
node.global_transform.origin += some_offset
Which is equivalent to:
node.global_transform.origin = node.global_transform.origin + some_offset
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论