在 Unreal Engine 的蓝图里,SetRelativeLocation
、SetWorldLocation
和 SetActorLocation
三个节点虽然都能改变物体位置,但作用对象和坐标空间(Coordinate Space)不同:
1. SetActorLocation
-
作用对象:整个 Actor(本质上是移动它的根组件 RootComponent)
-
坐标空间:世界空间(World Space)
-
典型用途:当你想直接把一个 Actor (比如一个敌人、道具、摄像机等)瞬间或平滑地移动到世界中的某个绝对坐标时,用这个节点。
-
参数要点:
-
New Location (Vector):目标世界坐标
-
Sweep? (Boolean):是否执行碰撞检测(扫掠移动,防止穿透墙体)
-
Teleport? (Boolean):是否忽略物理(true:直接传送,不触发物理碰撞响应)
-
2. SetWorldLocation
-
作用对象:一个 Scene Component(场景组件),包括 Mesh、Collision、Camera、Particle 等
-
坐标空间:世界空间(World Space)
-
典型用途:当你只想移动某个组件(比如把武器的 Mesh、子弹发射点,或某个粒子特效)到世界坐标,而不动 Actor 其它组件时,用它。
-
注意:如果该组件被 Attach(附着)到父组件,上层父组件的世界变换依然会影响它。
3. SetRelativeLocation
-
作用对象:同样是 Scene Component
-
坐标空间:相对空间(Local Space / Parent Space)
-
典型用途:当你想在组件的父对象(Actor Root 或其它父组件)本地坐标系下做偏移时用它。
-
例:把摄像机沿着角色的本地 Z 轴往后拉 50 单位,或把武器挂点在角色手部骨骼本地坐标系中上移 10 单位。
-
-
效果:组件位置会以父节点(Actor Root 或 Attach 父组件)的变换为基准来计算。
小结对比
节点 | 作用对象 | 坐标空间 | 何时用? |
---|---|---|---|
SetActorLocation | Actor(根组件) | 世界空间 | 整体移动 Actor 到世界指定坐标 |
SetWorldLocation | 组件(Scene Component) | 世界空间 | 单独移动某个组件到世界指定坐标,不影响父级附着 |
SetRelativeLocation | 组件(Scene Component) | 相对/本地空间 | 在父组件坐标系下做局部偏移 |
Tip:
如果你对一个 Actor 下的某个组件做相对位置调整,一定要用
SetRelativeLocation
,否则直接用SetWorldLocation
可能会被父组件的旋转、缩放影响,看起来“不听话”。
SetActorLocation
内部其实也是调用根组件的SetWorldLocation
,但它额外处理了碰撞、导航、Actor 相关的事件(比如触发OnActorBeginOverlap
)。三个节点都带 Sweep/Teleport 参数,要注意选择是否要碰撞检测或物理行为。