变换服务

  • 类型:Transform

服务对象
此对象为服务对象,可以使用GetService()函数获取此服务。

不可创建
无法使用RWObject:New(Classname)创建此对象,也不在编辑器对象列表中显示。

不在编辑器管理器中显示

简介

变换服务提供了一些函数来便捷地解决较为复杂的移动和旋转问题

现有的位置朝向属性仅表示对象的世界坐标和世界朝向,当一些操作涉及到相对坐标时,这两个属性往往没有那么好用。比如 将一个零件朝自身正前方移动,或使一个目标零件绕着另一个目标进行旋转

变换服务提供了一系列的方法,可以轻松实现相对坐标下的移动和旋转

  • 如何使用变换服务
    使用Transform的函数时,需要将被操作的对象作为参数。例:将出生点沿着自身坐标系进行移动
local workSpace = GetService("WorkSpace")
local transform = GetService("Transform")
local spawn = workSpace:WaitForChild("Spawn") --获取工作区下的出生点

transform.Move(spawn, Vector3.New(0, 0, 5)) --将出生点向其正前方移动5个单位

注意事项

当使用RotateAt函数时,只会改变目标对象的位置,而不改变目标对象的朝向
若需要在旋转时同时保持朝向,则需要额外使用ToLocalRotationToWorldRotation以及SetLocalTransform来进行设置,详见RotateAt函数实例

对象的表面基于该对象的相对朝向,
前方(Enum.SurfaceType.Front)对应于相对朝向下的z轴正方向
右侧(Enum.SurfaceType.Right)对应于相对朝向下的x轴正方向
顶部(Enum.SurfaceType.Top)对应于相对朝向下的y轴正方向

函数

    Move(tarObj,transVect)
    将指定对象根据自身坐标系进行位移

    MoveAt(tarObj,axisObj,transVect)
    将指定对象根据另一对象的坐标轴进行移动,移动的向量为transVect

    Rotate(tarObj,rotVect)
    将指定对象根据自身坐标系进行旋转,以ZXY的顺序根据输入的Vector3向量相应的值进行旋转。其中rotVect为角度制

    RotateAt(tarObj,axisObj,rotVect)
    将指定对象绕着另一对象的坐标点和另一对象的自身坐标轴进行旋转,以ZXY的顺序根据输入的Vector3向量相应的值进行旋转。其中rotVect为角度制

    LookAt(tarObj,surface,startPosition,targetPosition)
    将指定对象移动至目标点startPosition,再进行旋转,使其某一面朝向指定的坐标点targetPosition

    ToLocalPosition(localPosition,axisObj)
    将世界坐标转换成某个对象obj自身坐标系下的相对坐标

    ToLocalRotation(localRotation,axisObj)
    将世界欧拉角转换成某个对象obj自身坐标系下的相对欧拉角

    ToWorldPosition(worldPosition,axisObj)
    将某个对象obj自身坐标系下的相对坐标转换成世界坐标

    ToWorldRotation(worldRotation,axisObj)
    将某个对象obj自身坐标系下的相对欧拉角转换成世界欧拉角

    SetLocalTransform(tarObj,axisObj,localPosition,localRotation)
    根据obj2自身坐标系下的相对位置和相对欧拉角,设置obj1的位置和欧拉角

    Lerp(tarObj,startPosition,endPosition,alpha)
    将指定的对象1移动至 两个目标点的连线上,根据输入的浮点数alpha调整对象1在这条直线上的位置。alpha为0时,对象1移动到起始点startPos的位置;alpha为1时,移动到结束点endPos的位置。

文档更新时间: 2021-01-11 20:18   作者:王辰剑