这篇文章将为大家详细讲解有关U3D局部坐标和全局坐标的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
父子化(摘自官文原文说明)
父子化 (Parenting) 是使用 Unity 时需要理解的最重要的概念之一。当某个游戏对象 (GameObject) 是另一个游戏对象 (GameObject) 的父级 (Parent) 时,子级 (Child) 游戏对象 (GameObject) 会像其父级 (Parent) 一样移动、旋转和缩放。正如您的手臂与躯干相连,转动躯干时,手臂因为与其相连也会移动。任何对象都可以有多个子级,但却只能有一个父级。
您可以通过将层级视图 (Hierarchy View) 的任何游戏对象 (GameObject) 拖到另一个游戏对象上来创建一个父级 (Parent)。此操作会在两个游戏对象 (GameObject) 之间创建一种父子关系。
父子层级视图 (hierarchy) 示例。名称左侧有折叠箭头的游戏对象 (GameObjects) 是父级。
上述示例中,我们认为躯干是手臂的父级而手臂是手的父级。您在 Unity 中制作的场景将包含这些变换层级 (Transform hierarchy)的集合。最上层的父级对象被称为根对象 (Root object)。当您移动、缩放或旋转某个父级对象时,其变换 (Transform) 中的所有变化都会被应用于其子级对象。
值得指出的是任何子级游戏对象 (Child GameObject) 的检视器 (Inspector) 中的变换 (Transform) 值都会相对于父级 (Parent) 的变换 (Transform) 值而显示。这些值又被称局部坐标 (Local Coordinate) 。您可以通过脚本处理访问全局坐标 (Global Coordinate) 和局部坐标 (local coordinate)。
例如:
此时Cube1坐标视为全局部坐标或世界坐标
gameObject.transform.position=new Vector(2,2,0);就可以实现
也可以使用
Vector3 thePosition = transform.TransformPoint(newVector3(2,2,0));
gameObject.transform.position = thePosition;
Transform.TransformPoint 变换位置:变换位置从自身坐标到世界坐标(原文:Transforms position from local space to world space.)
现在给Cube1加个子对象Cube2并使Cube2移动到如图位置
使用gameObject.transform.position=new Vector(2,2,0);将无法如愿;
问题解析:根据红色字内容说明,此时Cube2中的检视器 (Inspector) 的坐标显示的是相对父级Cube1的坐标,所以只能先把自身坐标使用transform.TransformPoint方法转为世界坐标
Vector3 thePosition = transform.TransformPoint(newVector3(2,2.5,0));
gameObject.transform.position = thePosition;
坐标系的转换:
TransformDirection 将一个方向从局部坐标系转换到世界坐标系
InverseTransformDirection 将一个方向从世界坐标系转换到局部坐标系
TransformPoint 将一个点从局部坐标系转换到世界坐标系
InverseTransformPoint 将一个点从世界坐标系转换到局部坐标系
关于“U3D局部坐标和全局坐标的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。