首页 > 代码库 > 【和我一起学习Unity3D】Unity3D的坐标控制
【和我一起学习Unity3D】Unity3D的坐标控制
坐标这个东西,在Unity3D里面是分为几个类的,分别是Vector2,Vector3,Vector4;含义分别是:二维坐标系,三维坐标系,四维坐标系,一般做游戏呢,用到的最多的就是Vector3了,这篇文章主要讲的也是这个。
一般一个场景中,有X轴,Y轴,Z轴三个轴,以默认的坐标来说 X轴控制左右,Y轴控制上下,Z轴控制前后。
在这里有一个函数值得特别说明一下,就是transform组件里面的LookAt,这个函数用以将一个GameObject的Z轴对准另外一个GameObject,这样的话,如果想将这个GameObject移向另外一个GameObject的话,就可以直接将这个GameObject向前移就可以了,下面是例子:
using UnityEngine; using System.Collections; public class CCubeA: MonoBehaviour { publuc GameObject m_gCubeB; publuc float m_fMoveSpeed = 2.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.LookAt(m_gCubeB.transform); this.transform.Translate(Vector3.forward * m_fMoveSpeed * Time.deltaTime); } }
这样的话,当前方块A就向着方块B,以每秒2个单位的速度平移过去了。
这里还调用了一个函数,叫做Translate,这个函数主要是用来平移物体的(注意的是这个平移是一个瞬间动作),参数是一个Vector3,这个参数是表示平移的量,本例子中的公式解释为:单位距离乘以速度乘以单位时间等于单位时间上走的距离。
第一个变量Vector3.forward实质上就是(0,0,1),由上文我们知道,Z轴实际上是管理前后的,forward就是向前的意思。
第三个变量Time.deltaTime是上一帧到这一帧所花费的时间,乘上这个时间的话,就可以变成每秒平移的距离了。
整句话连起来就是:向前以每秒m_fMoveSpeed的速度平移(因this已经LookAt(m_gCubeB),所以向前移也就是向着m_gCubeB移动)。
------------------------------------------------------------------------------------------------------------
下面讲的是GameObject的旋转,旋转用的是transform中的Rotate,函数原型是:
void Rotate (Vector3 eulerAngles ,Space relativeTo = Space.Self);第一个参数是转移的角度,是角度制的,不是弧度制的,另外为什么是一个Vector3的变量呢?因为通过这个变量可以指定围绕哪个轴进行旋转。第二个参数是用来指定相对于自身旋转还是相对于世界坐标旋转。下面给出一个例子:
using UnityEngine; using System.Collections; public class CCubeA: MonoBehaviour { publuc float m_fRotateSpeed = 2.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.Rotate(Vector.up * m_fRotateSpeed * Time.deltaTime); } }
这个例子中的物体会以每秒2度的速度进行旋转,旋转的方式是围绕着X轴逆时针的旋转。
另外一个旋转的函数是RotateAround,其可以指定围绕某个GameObject进行旋转,这样可以做很多操作,比如摄像机围绕着主角进行旋转。这个函数的原型是:
void RotateAround (Vector3 point ,Vector3 axis,float angle);
第一个参数是围绕的点的位置,第二个参数是以什么轴为核心进行旋转,第三个自然是旋转的角度了。下面再举一个例子:
using UnityEngine; using System.Collections; public class CCubeA: MonoBehaviour { public GameObjcet m_gCubeB; publuc float m_fRotateSpeed = 2.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.RotateAround(m_gCubeB.transform.position, Vector.up, m_fRotateSpeed * Time.deltaTime); } }这个例子是当前的GameObject以m_gCubeB的位置为中心,围绕着m_gCubeB的Y轴进行旋转,旋转的速度是每秒2度
【和我一起学习Unity3D】Unity3D的坐标控制