Unity3d 變換(Transform)
首先,Transform是個很重要的東西,把這個掌握好了,在以后的編程中也可以輕松很多!
1.循環遍歷某gameobject的子物體並且刪除子物體
using UnityEngine;
using System.Collections;
public class FindChilds:MonoBehaviour{
//The Start function is called after all Awake functions on all script instances have been called.
//Start方法在Awake方法之后,在其它所有方法之前調用
void Start()
{
//循環遍歷子物體
foreach(Transform temp in transform)
{
//打印出子物體的名字
Debug.Log(temp.name);
//刪除子物體
Destory(temp.gameObject);
}
}
2.繞另一個物體旋轉
function RotateAround (point : Vector3, axis : Vector3, angle : float) : void
其中point是圍繞旋轉的中心點,axis是繞着旋轉的軸(x軸,y軸,z軸),angle是旋轉的角度
我個人的理解是,以point點為中心,繞着axis軸旋轉,angle就是角度!
3.說一下局部坐標和世界坐標
局部坐標就是本地坐標,世界坐標就是全局坐標!
比如我們有一個點,Vector3.forward(0,0,1)這個是本地坐標,准確的說是向量,也可以說是步長,可以用Transform.TransformDirector(0,0,1),我用個等式表示!
等式一:transform.Translate(Vector3.forward)=物體的上一幀坐標+transform.TransformDirector(0,0,1);
如果這個物體的三個軸的旋轉值都為0,縮放比例都為1,那么
transform.TransformDirector(任何三維點)=任何三維點
也就是說 坐標(transform.position)並沒有參加變換
等式二:transform.Translate(Vector3.forward)=物體的上一幀坐標+
transform.localToWorldMatrix*Vector3.forwad;
如果這個物體的三個軸的旋轉值都為0,縮放比例都為1,那么
transform.TransformDirector(任何三維點)=任何三維點
也就是說 坐標(transform.position)並沒有參加變換
等式三: tranform.Translate(Vector3.forward)=transform.TransformPoint(0,0,1);
也可以是,transform.position=transform.TransformPoint(0,0,1)也實現了不斷向自己的z軸前進的效果!
坐標(transform.position)參加了變換
等式一與等式二 都是變換了一個步長,所以需要加上原先的坐標,而等式三,則不需要,他就直接計算了原來的位置加上一個步長!
4.反變換
就是把世界坐標的點或者方向向量變換回到本地坐標
也就是 從世界坐標 轉換到 本地坐標
比如,可以把世界坐標中有一個點,可以Transform.InverseTransformDirection方法,把世界坐標中的這個點變換成 某個物體的本地坐標的點!
可InverseTransformDirection反變換一個方向向量!
如果有錯誤的地方,還請高手指教,多多學習!