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