Unity3d Transform

                                                   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反变换一个方向向量!

                    如果有错误的地方,还请高手指教,多多学习! 

   

                    

 

                  

 

 

 

posted @ 2013-01-20 12:54  广州阿龙  阅读(2862)  评论(2编辑  收藏  举报