对比transform中的世界参数和自身参数

谁都会走 提交于 2020-01-26 10:06:25

1、添加Test脚本,打开编辑:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

    private void Start()
    {

        Debug.Log("世界坐标:" + transform.position);
        Debug.Log("自身坐标:" + transform.localPosition);

        Debug.Log("世界四元数旋转:" + transform.rotation);
        Debug.Log("自身四元素旋转:" + transform.localRotation);

        Debug.Log("世界欧拉角旋转:" + transform.eulerAngles);
        Debug.Log("自身欧拉角旋转:" + transform.localEulerAngles);

        Debug.Log("世界缩放:" + transform.lossyScale);
        Debug.Log("自身缩放:" + transform.localScale);

        Debug.Log("自身转世界矩阵:" + transform.localToWorldMatrix);
        Debug.Log("世界转自身矩阵:" + transform.worldToLocalMatrix);
    }

}

2、创建Cube,点击小齿轮重置Transform

 

3、将Test脚本挂载到Cube身上

 

 

4、快捷键Ctrl+Shift+C打开Console窗口查看打印信息
5、运行查看打印信息

 

  • 此时Cube在世界空间下,世界坐标和自身坐标没有区别

6、新建空物体,重置Transform

 

7、Cube拖到空物体下,成为子物体

 

8、运行,查看打印

 

  • 当父物体重置Transform的情况下,世界坐标和自身坐标也没有区别

9、 改变父物体的Transform中的位置和旋转,运行打印

 

  • 世界坐标变化了,自身坐标没变

10、改变子物体Cube的Transform中的位置和旋转,运行打印

 

  • 世界坐标与自身坐标都变化了,其中自身坐标就是刚刚改变的子物体Cube刚刚修改的位置与旋转
  • 子物体Cube的自身坐标就是显示在检视面板的值,而子物体Cube的世界坐标的值=自身坐标的值+父物体坐标的值
  • 检视面板中的Rotation对应的是欧拉角旋转,而不是四元数旋转
  • 当Cube为子物体的时候,对应的检视面板中的Transform是自身坐标的值;当Cube不是子物体的时候,对应的检视面板中的Transform是世界坐标的值

11、改变父物体的缩放,运行打印

 

  • 世界坐标=自身坐标+父物体坐标*父物体缩放值

12、改变子物体的缩放,运行打印

 

  • 世界缩放=自身缩放*父物体缩放
  • 世界坐标不受子物体缩放印象;而是受父物体缩放影响



作者:Joe_Game
链接:https://www.jianshu.com/p/cb6eafab2201
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!