一种 BasePart 类型,玩家角色可以在其中“坐下”。当角色接触到启用的座位对象时,它将通过一个 Weld 附加到该部件上,默认角色脚本将播放坐下动画。
座位是如何工作的?
当一个包含 Humanoid 和一个名为 'HumanoidRootPart' 的 BasePart(通常是玩家角色)接触到座位时,将在座位和该部件之间创建一个 Weld。C0 和 C1 属性被配置,使得角色在座位上方 2 个单位处焊接。这个焊接被命名为 'SeatWeld',并被作为座位的子项。
当坐下时,Seat.Occupant 属性被设置为“坐在”座位上的 Humanoid。此外, humanoid 的 Humanoid.SeatPart 属性被设置为座位。
角色还可以使用 Seat:Sit() 函数被强制坐在座位上。
角色有两种方式可以离开座位。当玩家跳跃时,他们会被移出座位。然而,这也可以通过手动销毁座位焊接来完成,例如:
seat:FindFirstChild("SeatWeld"):Destroy()
注意,座位有一个冷却时间(当前为 3 秒),这是针对每个角色每个座位的。这意味着一旦角色离开了座位,他们将在 3 秒内无法再次坐在同一座位上。这个冷却行为可能会改变,开发人员不应该依赖它。
座位可以用来做什么?
座位有多种用途,从显而易见的到不太传统的。
- 创建不需要任何编程的椅子或长凳
- 允许角色在移动物体(如车辆)中“坐下”而不会被抛来抛去
- 创建由座位中的角色控制的接口,使用 Seat.Occupant 属性
代码示例
这个代码示例演示了如何使用 Seat.Occupant 属性来跟踪哪个玩家坐在座位上,以及他们何时坐下或起身。
local Players = game:GetService("Players")
local seat = Instance.new("Seat")
seat.Anchored = true
seat.Position = Vector3.new(0, 1, 0)
seat.Parent = workspace
local currentPlayer = nil
local function onOccupantChanged()
local humanoid = seat.Occupant
if humanoid then
local character = humanoid.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
print(player.Name .. " 已经坐下")
currentPlayer = player
return
end
end
if currentPlayer then
print(currentPlayer.Name .. " 已经起身")
currentPlayer = nil
end
end
seat:GetPropertyChangedSignal("Occupant"):Connect(onOccupantChanged)
概要
属性
座位是否可用。如果设置为 true,座位将作为一个普通的部件使用。
坐在座位上的 humanoid。
属性
设置对象的整体形状。
属性
决定一个部件是否被物理影响而无法移动。
部件组件的角速度。
部件组件的质心在世界空间中的位置。
部件组件的线速度。
部件组件的总质量。
对组件根部件的引用。
决定部件是否与音频模拟物理交互,类似于 CastShadow 对于光照。
确定部件背面表面的类型。
确定部件底面的类型。
确定部件的颜色。
决定 BasePart 在世界中的位置和方向。
决定部件是否可以与其他部件碰撞。
决定部件在空间查询操作中是否被考虑。
决定 Touched 和 TouchEnded 事件是否在该部件上触发。
决定部件是否投射阴影。
描述部件质心所在的世界位置。
描述部件的碰撞组名称。
决定部件的颜色。
指示部件的当前物理属性。
决定部件的多个物理属性。
用于启用或禁用部件和组件上的空气动力学力。
物理引擎认为的 BasePart 的实际物理大小。
决定部件前面表面的类型。
决定部件左面表面的类型。
决定 BasePart.Transparency 的只对本地客户端可见的乘数。
决定部件是否可以在 Studio 中被选择。
描述部件的质量,即其密度和体积的乘积。
决定部件对刚体的总质量或惯性的贡献。
决定部件的纹理和默认物理属性。
MaterialVariant 的名称。
描述部件在世界中的旋转。
指定部件的枢轴偏移量。
描述部件在世界中的位置。
最后一次记录的物理更新以来已经过去的时间。
决定一个部件反射天空盒的程度。
描述通过 Resize() 方法允许的最小大小变化。
描述一个部件可以被调整大小的面。
确定部件右面的表面类型。
确定一个组件的根部件的主要规则。
部件在三个轴上的旋转角度(以度为单位)。
确定一个部件的尺寸(长度、宽度、高度)。
确定部件上面的表面类型。
确定一个部件的透视度(透明度的反向)。
方法
强制具有指定 Humanoid 的角色坐在座位上。
方法
对组件施加角动量脉冲。
在组件的 质量中心 应用一个脉冲。
在指定位置对组件施加脉冲。
返回部件是否可以相互碰撞。
检查是否可以设置部件的网络所有权。
返回通过任何刚性连接连接到该对象的部件表。
返回连接到该部件的所有连接或约束。
返回 Mass 属性的值。
返回此部件的网络所有者玩家,如果是服务器则返回 nil。
如果游戏引擎自动决定此部件的网络所有者,则返回 true。
返回所有与该部件相交且 BasePart.CanCollide 为 true 的部件的表。
返回相对于此部件在给定位置的部件组件的线性速度。
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
从相交的几何形状创建新的 IntersectOperation。
如果对象连接到一个可以将其固定在原地的部件(例如 Anchored 部件),则返回 true,否则返回 false。
像使用 Studio 调整工具一样更改对象的大小。
将给定的玩家设置为此及所有连接部件的网络所有者。
允许游戏引擎动态决定谁将处理部件的物理(客户端之一或服务器)。
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
从部件创建新的 UnionOperation,减去给定数组中所占的几何形状。
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
从部件创建新的 UnionOperation,加上给定数组中所占的几何形状。
方法
获取 PVInstance 的支点。
转换 PVInstance 及其所有子代 PVInstances,使得支点现在位于指定的 CFrame。