Unity3D_TransForm相对世界坐标位移

在Unity3D的简单位移教程里我们经常看到如下代码

1
2
3
4
function Update ()
{
        transform.Translate(new Vector3(1,0,0)*Time.deltaTime);
}

这里的Vector3 即创建一个方向向量,此时运行,物体会沿着其X轴方向位移,如图,即红色箭头方向

同理 修改Vector3的参数,即可使物体向任意一个方向进行位移,这里的Time.deltaTime在文档里的解释是:

“放在Update()函数中的代码是以帧来执行的.如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime”

这样就确保了移动速度不至于过快

问题来了,这个物体的旋转方向已经改变,使用上文的方法,物体只会继续向着自身的x轴方向移动,如图,我们旋转角度已偏移,自身坐标角度与世界坐标角度已不重和

如果需要仍旧按照世界坐标的X轴方向运动
这里有两种方法,方法一,继续使用传统方法,但要进行一个向量的换算

方法二,查看API可以知道,translate这个方法其实还有第二个参数relativeTo(相对于)

function Translate (x : float, y : float, z : float, relativeTo : Space = Space.Self) : void

默认不写的话即为Space = Self,如果要相对于世界坐标的话,代码如下

1
2
3
4
function Update ()
{
        transform.Translate(new Vector3(1,0,0)*Time.deltaTime,Space.World);
}

此时即可相对于世界坐标的x轴方向运动了

同理如果希望相对于任意Gameobject的坐标进行运动,这里将Space.World 改成 GameObject.Transform 即可

虽然只是一个U3D函数拓展的使用方法,但常常容易被人们忽略,继而去自己编写向量转换或其他的方法。其实有时候多查一下API,看看是否已有可实现的方法,不失为一个好的习惯。

谢谢关注。共勉。

BeiTown
2013.03.14

本文链接:Unity3D_TransForm相对世界坐标位移

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>