PVInstance

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建
不可浏览

一个 PVInstance (“位置速度实例”)是一个抽象类,无法创建。它是所有具有世界物理位置的对象的基础,具体是 BasePartsModels

概要

属性

方法

  • 写入并联

    获取 PVInstance 的枢轴。

  • PivotTo(targetCFrame : CFrame):()

    将 以及所有其子孙 转换为位于指定 的位置,使旋转点现在位于指定的 。

属性

Origin

未复制
不可写入脚本
读取并联

Pivot Offset

未复制
不可写入脚本
读取并联

方法

GetPivot

写入并联

这个函数获取 PVInstance 的枢轴。这通常与 PVInstance:PivotTo() 一起使用,以移动模型。

ModelsBaseParts 都是 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事件在PositionOrientation移动时不会触发,仅在BaseParts移动时触发,它们仅用于CFrame

当调用 PivotToModels 时,子部件和模型的偏移被缓存,因此后续调用 PivotTo 在同一模型上的部件不会在模型组成部分之间积累漂浮点漂移。

ModelsBaseParts 都是 PVInstances (“位置速度实例”),因此两者都具有此功能。

参数

targetCFrame: CFrame

旋转后的 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)

活动