1.Transform所有组件
2.Position和LocalPosition
3.欧拉角(eulerAngles),Rotate(),和rotation
4.parent属性:父物体Transform实例
Debug.Log("position " + transform.position); //世界坐标的位置
Debug.Log("localPosition " + transform.localPosition); //相对于父位置的坐标 即把父物体当作自己的中心
Debug.Log("eulerAngles " + transform.eulerAngles);//世界坐标欧拉⾓度
Debug.Log("localEulerAngles " + transform.localEulerAngles);//相对于⽗级的变换的旋转欧拉⾓度
Debug.Log("localScale " + transform.localScale);//相对于父位置的缩放
Debug.Log("localRotation " + transform.localRotation);//相对于父位置的旋转
Debug.Log("rotation " + transform.rotation);//世界坐标的旋转
- 当子节点的Local Position为(son_x, son_y, son_z),父节点的LocalScale为(dad_x,dad_y,dad_z),父节点的World
Position为(dad_positionx,dad_positiony,dad_positionz).- 子节点的WorldPosition为(son_xdad_x+dad_positionx,son_ydad_y+dad_positiony,son_z*dad_z+dad_positionz)
注意:localScale会影响GameObject的position
此方法的功能是是的transform实例在relativeTo的坐标系中旋转欧拉角eularAngles。
//基本语法
public void Rotate(Vector3 eularAngles); public void
Rotate(Vector3 eularAngles, Space relativeTo); public void
Rotate(float xAngle, float yAngle, float zAngle); public void
Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo);
参数relativeTo为参考坐标系,默认为Space.Self)
解释:其中参数eularAngles为transform要旋转的欧拉角,可以是以Vector3的形式给出,也可以分别给出三个角度值。参数relativeTo为transform旋转时候参考的坐标系,如果不特殊说明,默认为Space.Self。
对立方体cubea进行操作,分别按照以自身坐标系为参照系、以世界坐标系为参照系、默认参照系。首先通过给transform.eulerAngles直接赋值,将自身坐标系绕x轴做一旋转。然后使用Rotate函数进行旋转。
cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
Debug.Log(“Space.Self1:” + cubec.transform.eulerAngles);
// 输出(30.0,0.0,0.0)
cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f), Space.Self);
Debug.Log(“Space.Self2:” + cubec.transform.eulerAngles);
// 输出(20.7, 49.1, 22.2)(其是绕(30.0, 0.0, 0.0)自身再旋转(0.0, 45.0, 0.0))
cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f), Space.World);
Debug.Log(“Space.World:” + cubec.transform.eulerAngles);
//输出(30.0,45.0,0.0)
cubea.transform.eulerAngles = new Vector3(30.0f, 0.0f, 0.0f);
cubea.transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f));
Debug.Log(“默认坐标系:” + cubec.transform.eulerAngles);
//输出(20.7, 49.1, 22.2)
此方法是使得GameObject对象在relativeTo坐标系中绕轴向量axis旋转angle度。如果想使GameObject对象实例绕着某个物体旋转,则需要使用Transform.RotateAround(point:Vector3, axis: Vector3, angle:float).
//基本语法
public void Rotate(Vector3 axis, float angle);
public void Rotate(Vector3 axis, float angle, Space relativeTo)
其中axis为旋转轴方向,参数angle为旋转角度,参数relativeTo为参考坐标系,默认为Space.Self。
Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度。又旋转了多少角度,是在原有的基础上在旋转
rotation属性是:旋转到某个角度,就是是在update中每帧都执行(我这里测试是放在了update中)。但每次旋转到的角度动是5,所以是旋转到5度。一直都是
比如你只想让他旋转到多少,用rotation;假如想让他一直转,可以用Rotate
此方法的功能是是的GameObject对象绕着point点的axis方向旋转angle度。
//基本语法
public void RotateAround(Vector3 axis, float angle); public
void RotateAround(Vector3 point,Vector3 axis,float angle)
其中,参数point为参考坐标系,参数axis为旋转轴方向,参数angle为旋转角度。
旋转实现的方式:
transform.Rotate()
transform.RotateAround()
transform.rotation =Quaternion.Eular(x,y,z)
transform.localRotation =Quaternion.Euler(x,y,z)
transform.eularAngles = new Vector3(x,y,z)
transform.localEulerAngles = new Vector(x,y,z)
前两种是通过transform的实例方法来实现的,在3.2和3.3中已经进行了阐述。
下面分别讲述剩余4种
transform.rotation = Quaternion.Eular(x,y,z)
效果:代表了物体的旋转,不能直接为transform.rotation赋值。可以使用各种Quaternion的方法。
transform.eularAngles = new Vector3(x,y,z)
效果:与Quaternion.enlerAngles基本相同,用来设定物体的旋转角度,但不要分别设置xyz,要整体赋值。
注意以下三种方式最后得到的结果都是一样的,只是在赋值的方式上有差异。(以上两种方式都不涉及到本地坐标系的问题)
GameObject Cube;
Cube.transform.Rotate(a,b,c); //1
Cube.transform.Rotate(new Vector3(a,b,c)); //1.1
Cube.transform.rotation = Quaternion.Eular(a,b,c); //2
Cube.transform.eularAngles = new Vector3(a,b,c) //3
transform.localRotation = Quaternion.Euler(x,y,z)
效果:在父物体的坐标系下的旋转变换
transform.localEulerAngles = new Vector(x,y,z)
效果:在父物体的坐标系下的旋转欧拉角
cube2.transform.localEulerAngles = new Vector3(0.0f, 50.0f, 0.0f);
cube2.transform.localRotation = Quaternion.Euler(0.0f, 50.0f, 0.0f);
//2种方法获得的结果相同
以上内容摘自:
https://blog.csdn.net/loongkingwhat/article/details/80568507
和
https://blog.csdn.net/bobo553443/article/details/79671174