主题
BasePart
概览
| 字段 | 值 |
|---|---|
| Kind | Unit · 单位 Unit |
| Realm | common |
继承关系
- Unit(4 属性 / 25 函数 / 6 事件)
- SpaceUnit(2 属性 / 9 函数)
- [BasePart](24 属性 / 9 函数)
- PhysicsUnit(21 属性 / 15 函数 / 4 事件)
- RenderUnit(17 属性 / 1 函数)
- SeatUnit(3 属性 / 1 事件)
- SurfaceGui(8 属性)
- TriggerUnit(8 属性 / 7 函数 / 4 事件)
- RenderTriggerUnit(18 属性 / 1 函数)
- WorldUnit(31 属性 / 16 函数 / 6 事件)
- AnimatedUnit(3 函数)
- SpawnLocationUnit(8 属性)
- [BasePart](24 属性 / 9 函数)
- SpaceUnit(2 属性 / 9 函数)
继承成员
2 个来源 / 6 属性 / 34 函数 / 6 事件
- 来自 SpaceUnit(2 属性 / 9 函数)
- 来自 Unit(4 属性 / 25 函数 / 6 事件)
- 属性:
AssetId、Name、Desc、Parent - 函数:
ClearAllChildren、GetChildren、GetDescendants、IsAncestorOf、IsDescendantOf、FindFirstAncestor、FindFirstAncestorWhichIsA、FindFirstAncestorOfClass、FindFirstChild、FindFirstChildWhichIsA、FindFirstChildOfClass、HasChildren、GetChildCount、GetChildAtIndex、SetAttribute、GetAttribute、GetAllProps、Clone、IsA、Destroy、GetPropertyChangedSignal、GetAttributeChangedSignal、FindFromPath、GetFullPath、GetDebugId - 事件:
ChildAdded、ChildRemoved、DescendantAdded、DescendantRemoving、AncestryChanged、Destroying
- 属性:
BasePart 是场景中所有具备碰撞与渲染表现的 3D 部件共享的基类,WorldUnit、PhysicsUnit、RenderUnit 等都从它继承这套公共能力。它同时覆盖三个层面:用 CFrame、Position、Rotation、Size、PivotOffset 描述空间形态,用 ModelAlpha、ModelVisible、ModelColor1 至 ModelColor4、SkinId 控制外观,用 AssemblyLinearVelocity、AssemblyAngularVelocity、AssemblyMass 观察装配体力学状态,并附带网络所有权与焊接关系的查询接口。
适用场景
当需要统一地摆放、隐藏、染色场景部件,或读取某个部件所在装配体的速度与质量时使用。典型做法是拿到 PhysicsUnit、WorldUnit 之类的子类实例后,直接按 BasePart 的属性接口调整位置与外观,并用 IsNetworkOwnerSide 判断当前端是否负责该部件的模拟。
使用要点
通过子类实例(如 WorldUnit)访问 BasePart 的属性和方法。ModelColor1~4 的公开类型是 Color,规范写法为 Color.New(r, g, b, a),但实际染色还依赖资源 color mask;赋值后变白或无变化时不要反复改 RGBA,应先更换支持染色的资源。少数兼容资源只接受整数色值属于实现差异,不是稳定公开契约。服务端可用 GetNetworkOwner/SetNetworkOwner 管理物理网络所有权。父子层级本身已满足稳定跟随时不要叠加 WeldConstraint;确需显式焊接时,先解除 Parent,再建立约束并在目标运行包验证。
注意事项
BasePart 不可直接创建,必须通过子类实例间接使用。网络所有者的查询与设置通常在服务端处理;客户端可用 IsNetworkOwnerSide 判断当前端是否拥有该部件的网络模拟权。可读取 AssemblyLinearVelocity 等属性观察装配体的物理状态;施加物理作用前需确保对象处于物理模拟激活状态。ModelColor1~ModelColor4 的类型在 Meta 中为 Color,但部分模型资源的染色区域受资源自身 color mask 支持情况影响;若赋值后统一变白或无变化,优先确认模型是否包含对应染色区域。当前版本中个别场景使用整数色值(如 tonumber("ff0000", 16))更接近编辑器染色表现,脚本示例应标注资源依赖,避免承诺所有模型都可通过 Color 直接染色。当前运行包还会为 BasePart 父子层级建立隐式刚性连接,该连接可能优先于显式 WeldConstraint;已处于父子关系的对象再创建焊接,或事后解除 Parent,不能保证原焊接自动接管。需要显式约束时应先解除父子层级,再创建并验证 WeldConstraint。
代码示例
创建具体物理部件并读取物理状态
lua
-- @runtime client
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', {
Position = Vector3.New(0, 5, 0),
PhysicsActive = true,
})
print('当前线速度:', part.AssemblyLinearVelocity)
part:Destroy()属性 (24)
| Name | 类型 | 默认值 | 说明 |
|---|---|---|---|
CFrame | CFrame | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] | BasePart 的空间变换属性,类型为 CFrame,同时表达该部件的位置与旋转信息。 |
PivotOffset | CFrame | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] | BasePart 的轴心偏移属性,类型为 CFrame,用于描述部件轴心相对于默认轴心的偏移变换。 |
Position | Vector3 | [0.0, 0.0, 0.0] | BasePart 的位置属性,类型为 Vector3,表示部件在空间中的坐标。 |
Rotation | Quaternion | [0.0, 0.0, 0.0, 1.0] | BasePart 的旋转属性,类型为 Quaternion,用于描述部件的朝向。 |
Scale | Vector3 | [1.0, 1.0, 1.0] | BasePart 的缩放属性,类型为 Vector3,用于描述部件在各轴向上的缩放。 |
Size | Vector3 | - | BasePart 的尺寸属性,类型为 Vector3,用于描述部件在各轴向上的大小。 |
ModelAlpha | Float | 1 | 单位模型的整体透明度,类型为 Float,默认值为 1。 |
ModelVisible | Bool | true | 单位模型是否可见,类型为 Bool,默认值为 true。 |
CastShadow | Bool | true | 该单位是否投射阴影,类型为 Bool,默认值为 true。 |
ModelColor1 | Color | Color.New(255, 255, 255, 255) | 染色区域 1 的颜色;实际效果依赖模型资源是否包含对应 color mask,部分资源可能忽略 Color 赋值或表现为白色。 |
ModelColor2 | Color | Color.New(255, 255, 255, 255) | 染色区域 2 的颜色;实际效果依赖模型资源是否包含对应 color mask。 |
ModelColor3 | Color | Color.New(255, 255, 255, 255) | 染色区域 3 的颜色;实际效果依赖模型资源是否包含对应 color mask。 |
ModelColor4 | Color | Color.New(255, 255, 255, 255) | 染色区域 4 的颜色;实际效果依赖模型资源是否包含对应 color mask。 |
SkinId | String | "" | BasePart 的皮肤标识,类型为字符串,可读可写,用于指定部件使用的皮肤。 |
UseCustomAppearance | Bool | false | 单位是否使用自定义外观,类型为 Bool,默认值为 false。 |
CustomAppearanceId | String | "" | 单位使用的自定义外观标识,类型为 String,默认值为空字符串。 |
OcclusionType | Int | 3 (不处理) | 该单位遮挡玩家时采用的处理规则;Meta 将类型声明为 Int,默认值为 3(不处理)。 |
AssemblyRootPriority | Int | 0 | 装配根的优先级,类型为 Int,默认值为 0。 |
AssemblyLinearVelocity | Vector3 | [0, 0, 0] | BasePart 的装配体线速度属性,类型为 Vector3,描述该部件所属装配体的线速度。 |
AssemblyAngularVelocity | Vector3 | [0, 0, 0] | BasePart 的装配体角速度属性,类型为 Vector3,描述该部件所属装配体的角速度。 |
AssemblyMass | Float | 0 | 该单位所属装配体的质量,类型为 Float,默认值为 0。 |
AssemblyCenterOfMass | Vector3 | [0, 0, 0] | BasePart 的装配体质心属性,类型为 Vector3,描述该部件所属装配体的质心位置。 |
Persistent | Bool | false | Streaming 相关的 Bool 字段,默认 false;当前 Streaming 功能暂未启用,修改该字段没有任何效果。不能据此保证对象常驻、改变 AOI 或跨范围可见性。 |
IsStaticOptimization | Bool | false | 静态优化开关,类型为 Bool,默认值为 false。 |
关联类型
函数 (9)
IsNetworkOwnerSide
签名:IsNetworkOwnerSide() -> Bool
判断当前端是否为该单位的物理拥有者端。
返回值 Bool
示例代码
调用 IsNetworkOwnerSide
lua
-- @runtime client
local function demo(basePart)
if basePart ~= nil then
local result = basePart:IsNetworkOwnerSide() -- 返回 Bool
if result then
print("调用结果为 true")
else
print("调用结果为 false")
end
end
endGetNetworkOwner
签名:GetNetworkOwner() -> Player
获取当前部件的物理拥有者,返回对应的 Player 对象。该函数不接收任何参数,调用后给出该部件物理模拟当前归属的玩家。
⚙ 在服务端读取当前网络所有者;没有明确所有者时可能返回 nil。
返回值 Player
示例代码
服务端读取网络所有者
lua
-- @runtime server
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', {
Position = Vector3.New(0, 5, 0),
PhysicsActive = true,
})
local owner = part:GetNetworkOwner()
if owner ~= nil then
print('网络所有者:', owner:GetName())
else
print('当前没有指定网络所有者')
end
part:Destroy()SetNetworkOwner
签名:SetNetworkOwner(player: Player) -> void
设置部件的物理拥有者,把该部件的物理模拟归属到指定的 Player。调用时需要传入一个 Player 类型的参数。
⚙ 在服务端把物理部件的网络所有权交给指定 Player。
| 参数 | 类型 | 说明 |
|---|---|---|
player | Player | 要转移权限的玩家对象 |
返回值 void
示例代码
服务端设置网络所有者
lua
-- @runtime server
local Players = game:GetService('Players')
local World = game:GetService('World')
local player = Players:GetPlayers()[1]
if player ~= nil then
local part = World:CreateUnit('WorldUnit', {
Position = Vector3.New(0, 5, 0),
PhysicsActive = true,
})
part:SetNetworkOwner(player)
print('已设置网络所有者:', player:GetName())
part:Destroy()
endGetNetworkOwnershipAuto
签名:GetNetworkOwnershipAuto() -> Bool
查询该部件的物理拥有者当前是否处于自动分配模式,返回一个布尔值。
返回值 Bool
示例代码
服务端查询网络所有权分配模式
lua
-- @runtime server
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', { PhysicsActive = true })
if part == nil then return end
print('是否自动分配网络所有者:', part:GetNetworkOwnershipAuto())
part:Destroy()SetNetworkOwnershipAuto
签名:SetNetworkOwnershipAuto() -> void
把该部件的物理拥有者设置为自动分配模式,函数没有返回值。
返回值 void
示例代码
服务端恢复网络所有权自动分配
lua
-- @runtime server
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', { PhysicsActive = true })
if part == nil then return end
print('调用前是否自动分配:', part:GetNetworkOwnershipAuto())
part:SetNetworkOwnershipAuto()
print('恢复自动分配:', part:GetNetworkOwnershipAuto())
part:Destroy()IsWeldConstraintRoot
签名:IsWeldConstraintRoot() -> Bool
判断该单位是否为焊接约束的根单位。
返回值 Bool
示例代码
查询部件是否为焊接装配体根单位
lua
-- @runtime client
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', {})
if part == nil then return end
print('是否为焊接根单位:', part:IsWeldConstraintRoot())
part:Destroy()IsWeldConstraintChild
签名:IsWeldConstraintChild() -> Bool
判断该单位是否为焊接约束的子单位。
返回值 Bool
示例代码
查询部件是否为焊接装配体子单位
lua
-- @runtime client
local World = game:GetService('World')
local part = World:CreateUnit('WorldUnit', {})
if part == nil then return end
print('是否为焊接子单位:', part:IsWeldConstraintChild())
part:Destroy()GetConnectedUnits
签名:GetConnectedUnits() -> Map
获取通过约束与该部件连接的所有单位,返回一个键为整型索引、值为 WorldUnit 的映射表。
返回值 Map
示例代码
调用 GetConnectedUnits
lua
-- @runtime client
local function demo(basePart)
if basePart ~= nil then
local result = basePart:GetConnectedUnits() -- 返回 Map
if result ~= nil then
for key, item in pairs(result) do
print(key, item)
end
end
end
endSyncRenderToPhysics
签名:SyncRenderToPhysics() -> void
将本地渲染强制同步到最新位置。
⚙ 最新 Meta 已公开 SyncRenderToPhysics,且未声明额外前置条件或单独 realm;当前运行包在客户端调用会触发运行时内部错误。在运行时实现与 Meta 对齐前请勿调用。
返回值 void
示例代码
当前版本的接口可用性说明
lua
-- @runtime client
local World = game:GetService('World')
local part = World:FindFirstChild('PhysicsPart', true)
if part ~= nil then
print('已找到物理部件;当前运行包请勿调用 SyncRenderToPhysics')
end