Skip to content

ModelUnit

概览

字段
KindUnit · 单位 Unit
Realmcommon

继承关系

  • Unit(4 属性 / 25 函数 / 6 事件)

继承成员

2 个来源 / 7 属性 / 34 函数 / 6 事件

ModelUnit 是用于组织多个 SpaceUnit 子对象并以统一枢轴进行整体移动的模型容器。

适用场景

典型场景是在场景中创建模型容器,将多个部件或单位作为子对象挂载后,通过设置 PrimaryPart 或 WorldPivot 来确定整体基准,再借助 Position、Rotation 或 MoveTo 对模型整体进行移动、旋转与定位。

使用要点

通过 World:CreateUnit 创建 ModelUnit,把多个 SpaceUnit 子对象的 Parent 设为该容器;先设置 WorldPivot 或 PrimaryPart,再设置 Position/Rotation、调用 MoveTo(position) 或使用继承的 PivotTo 移动整个组合。

注意事项

PrimaryPart 是模型整体移动和物理模拟的参考基准;设置后枢轴跟随该部件,WorldPivot 会被忽略。未设置 PrimaryPart 时,WorldPivot 只更新模型自身枢轴,不会直接移动子对象,但 PivotTo、MoveTo 等操作会以它计算位移增量。新模型在首次设置 WorldPivot 前以原点为默认枢轴,建议移动前主动设置 WorldPivot 或 PrimaryPart。Position 与 Rotation 是 PivotTo 的便捷属性,同时仍可使用从 SpaceUnit 公开继承的 PivotTo、GetPivot、TranslateBy 等成员。

代码示例

创建模型并按枢轴整体移动

lua
-- @runtime client
local World = game:GetService("World")
local model = World:CreateUnit("ModelUnit", {
    Name = "MovingGroup",
    WorldPivot = CFrame.New(0, 0, 0),
})
World:CreateUnit("WorldUnit", { Name = "ChildA", Parent = model })
World:CreateUnit("WorldUnit", { Name = "ChildB", Parent = model })
model:MoveTo(Vector3.New(10, 0, 0))
print("模型位置:", model.Position)

属性 (4)

Name类型默认值说明
PrimaryPartSpaceUnit-模型的核心部件,作为整体移动和物理模拟的参考基准。设置后枢轴跟随该部件;未设置时由 WorldPivot 决定。
WorldPivotCFrame-未设置 PrimaryPart 时使用的世界空间枢轴。直接赋值只更新 ModelUnit 自身枢轴,不会移动子对象;PivotTo、MoveTo 等操作以它计算位移增量。
PositionVector3[0.0, 0.0, 0.0]模型在世界空间中的位置,是调用 PivotTo 的便捷属性。
RotationQuaternion[0.0, 0.0, 0.0, 1.0]模型在世界空间中的四元数旋转,是调用 PivotTo 的便捷属性。

关联类型

函数 (1)

MoveTo

签名:MoveTo(position: Vector3) -> void

将模型整体移动到指定的世界空间位置。

⚙ MoveTo 使用当前模型枢轴计算整体位移;移动前应先设置 WorldPivot 或 PrimaryPart,避免新模型默认原点枢轴带来意外偏移。

参数类型说明
positionVector3世界空间中的目标坐标

返回值 void

示例代码

按已设置的枢轴移动模型

lua
-- @runtime client
local World = game:GetService("World")
local model = World:CreateUnit("ModelUnit", {
    Name = "MovingModel",
    WorldPivot = CFrame.New(0, 0, 0),
})
World:CreateUnit("WorldUnit", { Name = "Child", Parent = model })
model:MoveTo(Vector3.New(10, 5, 0))
print("移动后位置:", model.Position)