RotateAt

格式

RotateAt(tarObj,axisObj,rotVect)

描述

将目标对象tarObj绕另一对象axisObj的坐标点,以axisObj的自身坐标系进行旋转,rotVect为该坐标系下的相对旋转向量

注意事项

RotateAt函数只改变目标对象的位置,而不改变其朝向

  • 在世界坐标系下绕指定目标旋转
    RotateAt函数会将目标对象按照参照对象的坐标系进行旋转,若想要绕参照对象按照世界坐标系进行旋转,需要另外的方法。
    实例2中,在参照对象的位置创建了一个新的零件,作为世界坐标系的参照,再将目标对象绕该零件旋转

  • 在相对坐标系下绕指定目标旋转,并保持相对朝向不变
    若希望对象在绕某个对象旋转时,该对象的朝向同步改变,类似跟随摄像机的效果,则需要额外设置被旋转对象的朝向,如例1所示

参数

名称 类型 默认值 描述
tarObj RWObject 待操作的对象
axisObj RWObject 作为坐标系原点和旋转中心的参照对象
rotVect Vector3 相对目标点的旋转角度

实例

实例1:在相对坐标系下绕指定目标旋转,同时旋转朝向

local workSpace = GetService("WorkSpace")
local transform = GetService("Transform")
local rotVector = Vector3.New(0, 90, 0) --旋转的向量

--创建零件作为旋转的参照物
local referencePart = RWObject:New("Part")
referencePart.Position = Vector3.New(0, 0, 5) --设置零件位置
referencePart.Rotation = Vector3.New(-45, 0, 0) --将零件绕x轴旋转
referencePart.Anchored = true --将零件锚定
referencePart.Parent = workSpace
local rotatedObj = workSpace:WaitForChild("Spawn") --获取出生点

wait(3)
transform:RotateAt(rotatedObj, referencePart, rotVector) --根据参照物相对坐标旋转

--使朝向同步改变
local LocalRotation = transform:ToLocalRotation(rotatedObj.Rotation, referencePart) + rotVector --将被旋转对象的朝向转化成参照物坐标系下的相对朝向,并加上旋转的向量
local WorldRotation = transform:ToWorldRotation(LocalRotation, referencePart) --将计算得到的旋转后的相对朝向重新转化成世界朝向
rotatedObj.Rotation = WorldRotation --将计算得到的世界朝向赋值给被旋转的对象

实例2:在世界坐标系下绕指定目标旋转

local workSpace = GetService("WorkSpace")
local transform = GetService("Transform")

local rotVector = Vector3.New(0, 90, 0) --旋转的向量

--创建零件作为旋转的参照物
local referencePart = RWObject:New("Part")
referencePart.Position = Vector3.New(0, 0, 5) --设置零件位置
referencePart.Rotation = Vector3.New(-45, 0, 0) --将零件绕x轴旋转
referencePart.Anchored = true --将零件锚定
referencePart.Parent = workSpace
local rotatedObj = workSpace:WaitForChild("Spawn") --获取出生点

--在参照物的位置创建一个新的零件,作为世界坐标的参照
local worldAxisReference = RWObject:New("Part")
worldAxisReference.Position = referencePart.Position --使位置与旋转参照物一致
worldAxisReference.Anchored = true --将零件锚定
worldAxisReference.CanCollide = false --取消零件碰撞
worldAxisReference.Transparency = 0 --隐藏该零件
worldAxisReference.Parent = workSpace

wait(3)
transform:RotateAt(movedObj, worldAxisReference, rotVector) --根据世界坐标绕参照物进行旋转
文档更新时间: 2020-12-25 15:00   作者:王辰剑