【和我一起学习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度
轉載于:https://www.cnblogs.com/bhlsheji/p/5258923.html
總結
以上是生活随笔為你收集整理的【和我一起学习Unity3D】Unity3D的坐标控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js中父窗口获得模态窗口的返回值
- 下一篇: iOS判断是模拟器还是真机