RemoteTransform3D
2026/4/14大约 2 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — RemoteTransform3D
RemoteTransform3D
节点继承关系
继承链:Node -> RemoteTransform3D
注意
RemoteTransform3D 直接继承自 Node,但它影响的是 Node3D 类型的目标节点。
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
RemoteTransform3D 和 RemoteTransform2D 是同一个东西,只不过用于3D空间。它可以让一个3D节点的位置、旋转、缩放"远程同步"到另一个3D节点上。
简单说:3D版本的"位置遥控器"。
使用频率:★★ 偶尔使用
节点用途
- 武器跟随:让独立存在的3D武器模型跟随角色手部
- 特效跟随:让粒子特效跟随3D物体移动
- 相机控制:远程控制3D相机的变换
- 分离节点树:在不能使用父子关系时同步变换
使用场景
| 场景 | 说明 |
|---|---|
| FPS武器 | 武器模型在独立的场景中,但需要跟随玩家手部 |
| 粒子特效 | 爆炸特效需要跟随移动的目标 |
| 多人同步 | 远程控制其他玩家的位置 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| 任意 Node3D | 通过 remote_path 属性指向目标节点 |
生效必备素材/资源
需要设置 remote_path 指向目标 Node3D 节点。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| remote_path | NodePath | NodePath("") | RemoteTransform3D | 目标节点的路径 |
| use_global_coordinates | bool | true | RemoteTransform3D | 是否使用全局坐标 |
| update_position | bool | true | RemoteTransform3D | 是否同步位置 |
| update_rotation | bool | true | RemoteTransform3D | 是否同步旋转 |
| update_scale | bool | true | RemoteTransform3D | 是否同步缩放 |
信号
RemoteTransform3D 没有自己的特有信号。
常用方法
| 方法 | 说明 |
|---|---|
| GetRemoteNode() | 获取当前指向的远程目标节点 |
代码示例
C
// C# - 3D武器跟随角色手部
using Godot;
public partial class WeaponManager : Node3D
{
private RemoteTransform3D _remoteTransform;
private Marker3D _handMarker;
public override void _Ready()
{
_remoteTransform = new RemoteTransform3D();
_remoteTransform.UseGlobalCoordinates = true;
_remoteTransform.UpdatePosition = true;
_remoteTransform.UpdateRotation = true;
_remoteTransform.UpdateScale = false;
AddChild(_remoteTransform);
// 获取角色手部标记点并同步
_handMarker = GetTree().CurrentScene.GetNode<Marker3D>("Player/HandMarker");
_remoteTransform.RemotePath = _handMarker.GetPath();
}
}GDScript
# GDScript - 3D武器跟随角色手部
extends Node3D
var remote_transform: RemoteTransform3D
func _ready():
remote_transform = RemoteTransform3D.new()
remote_transform.use_global_coordinates = true
remote_transform.update_position = true
remote_transform.update_rotation = true
remote_transform.update_scale = false
add_child(remote_transform)
# 获取角色手部标记点并同步
var hand_marker = get_tree().current_scene.get_node("Player/HandMarker")
remote_transform.remote_path = hand_marker.get_path()