一个 PVInstance (“位置速度实例”)是一个抽象类,无法创建。它是所有具有世界物理位置的对象的基础,具体是 BaseParts 和 Models 。
概要
方法
获取 PVInstance 的枢轴。
将 以及所有其子孙 转换为位于指定 的位置,使旋转点现在位于指定的 。
属性
方法
GetPivot
这个函数获取 PVInstance 的枢轴。这通常与 PVInstance:PivotTo() 一起使用,以移动模型。
Models 和 BaseParts 都是 PVInstances (“位置速度实例”),因此两者都具有此功能。
返回
代码示例
这段代码示例是一个简单的传送脚本,可以将你的角色向你当前面向的方向移动 10 格。当你按下 F 键时,它会将你的角色传送到你当前面向的方向。它这样做是通过获取当前支点 PVInstance:GetPivot() 并调用 PVInstance|PivotTo 来向前移动角色。
-- 此代码应放置在启动玩家脚本脚本下的本地脚本中
local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")
local player = Players.LocalPlayer
local function doTeleport(_actionName, inputState, _inputObject)
local character = player.Character
if character and character.Parent and inputState == Enum.UserInputState.Begin then
-- 将角色向前移动 10 格,在它们面向的方向
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(0, 0, -10))
end
end
ContextActionService:BindAction("Teleport", doTeleport, true, Enum.KeyCode.F)
PivotTo
将 以及所有其子孙 转换为位于指定 的位置,使旋转点现在位于指定的 。这是应该用于通过脚本移动 Models 的主要功能。
BaseParts 通过移动其 CFrame 被必要的偏移值转换而移动。Models 通过将其 Model.WorldPivot 转换为必要的偏移值来这样移动它们。
请注意,为了提高效率,Object.Changed事件在Position和Orientation移动时不会触发,仅在BaseParts移动时触发,它们仅用于CFrame。
当调用 PivotTo 在 Models 时,子部件和模型的偏移被缓存,因此后续调用 PivotTo 在同一模型上的部件不会在模型组成部分之间积累漂浮点漂移。
Models 和 BaseParts 都是 PVInstances (“位置速度实例”),因此两者都具有此功能。
参数
旋转后的 CFrame 应等于移动后的 PVInstance 。
返回
代码示例
这段代码示例是一个简单的传送脚本,可以将你的角色向你当前面向的方向移动 10 格。当你按下 F 键时,它会将你的角色传送到你当前面向的方向。它这样做是通过获取当前支点 PVInstance:GetPivot() 并调用 PVInstance|PivotTo 来向前移动角色。
-- 此代码应放置在启动玩家脚本脚本下的本地脚本中
local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")
local player = Players.LocalPlayer
local function doTeleport(_actionName, inputState, _inputObject)
local character = player.Character
if character and character.Parent and inputState == Enum.UserInputState.Begin then
-- 将角色向前移动 10 格,在它们面向的方向
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(0, 0, -10))
end
end
ContextActionService:BindAction("Teleport", doTeleport, true, Enum.KeyCode.F)