unity3d中Transform所有组件变量详解(转发总结)

列表

  • 1.Transform所有组件

  • 2.Position和LocalPosition

  • 3.欧拉角(eulerAngles),Rotate(),和rotation

    • 3.1 eularAngles属性:欧拉角 项目
    • 3.2 Rotate方法:绕轴旋转旋转
      • 3.2.1 绕坐标轴旋转
      • 3.2.2 绕某个向量旋转
    • 3.3 RotateAround方法:绕轴点旋转
  • 4.parent属性:父物体Transform实例

1.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);//世界坐标的旋转

2.Position和LocalPosition

  • 当子节点的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

3.欧拉角(eulerAngles),Rotate(),和rotation

3.1 eularAngles属性:欧拉角

在这里插入图片描述

  • 在(Unity 3D)U3D中使用四元数Quaternion来存储和表示GameObject的旋转角度。
  • 只能对transform.eularAngles进行整体赋值,例如transform.eularAngles = newVector(1.0f,2.0f,3.0f),不可以对transform.eularAngles的单独分量进行赋值,例如transform.eularAngles.x = 1.0f是不可以的。
  • transform.eularAngles进行赋值或者获取的的时候,值都是相对世界坐标系而言的,若需要是相对父物体进行的角度变换则需要使用属性localEularAngles来设置。
  • transform.eularAngles使用顺规z-x-y,即transform.eularAngles = newVector3(10.0f, 20.0f,30.0f),则GameObject对象会沿着z轴先旋转30°,再沿着x轴旋转10°,最后再沿着y轴旋转20°。

3.2 Rotate方法:绕轴旋转旋转

在这里插入图片描述
在这里插入图片描述

3.2.1 绕坐标轴旋转

此方法的功能是是的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)

3.2.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

3.3 RotateAround方法:绕轴点旋转

此方法的功能是是的GameObject对象绕着point点的axis方向旋转angle度。

//基本语法
public void RotateAround(Vector3 axis, float angle); public
void RotateAround(Vector3 point,Vector3 axis,float angle)

其中,参数point为参考坐标系,参数axis为旋转轴方向,参数angle为旋转角度。

4. 旋转方式总结

旋转实现的方式:
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种方法获得的结果相同

4. parent属性:父物体Transform实例

  • 此属性用于返回父物体的Transform实例。
  • transform.parent只能返回夫以及对象的Transform,若要返回父物体的父物体,可以使用transform.parent.parent,更多级父物体依此类推。若父物体不存在,则返回null。
  • 如果想返回transform中最顶层的父物体,可以使用transform.root。

以上内容摘自:
https://blog.csdn.net/loongkingwhat/article/details/80568507

https://blog.csdn.net/bobo553443/article/details/79671174

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值