U3D局部坐标和全局坐标的示例分析(u3d,开发技术)

时间:2024-05-03 20:50:19 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

父子化(摘自官文原文说明)

父子化 (Parenting) 是使用 Unity 时需要理解的最重要的概念之一。当某个游戏对象 (GameObject) 是另一个游戏对象 (GameObject) 的父级 (Parent) 时,子级 (Child) 游戏对象 (GameObject) 会像其父级 (Parent) 一样移动、旋转和缩放。正如您的手臂与躯干相连,转动躯干时,手臂因为与其相连也会移动。任何对象都可以有多个子级,但却只能有一个父级。

您可以通过将层级视图 (Hierarchy View) 的任何游戏对象 (GameObject) 拖到另一个游戏对象上来创建一个父级 (Parent)。此操作会在两个游戏对象 (GameObject) 之间创建一种父子关系。

U3D局部坐标和全局坐标的示例分析
父子层级视图 (hierarchy) 示例。名称左侧有折叠箭头的游戏对象 (GameObjects) 是父级。

上述示例中,我们认为躯干是手臂的父级而手臂是手的父级。您在 Unity 中制作的场景将包含这些变换层级 (Transform hierarchy)的集合。最上层的父级对象被称为根对象 (Root object)。当您移动、缩放或旋转某个父级对象时,其变换 (Transform) 中的所有变化都会被应用于其子级对象。

值得指出的是任何子级游戏对象 (Child GameObject) 的检视器 (Inspector) 中的变换 (Transform) 值都会相对于父级 (Parent) 的变换 (Transform) 值而显示。这些值又被称局部坐标 (Local Coordinate) 。您可以通过脚本处理访问全局坐标 (Global Coordinate) 和局部坐标 (local coordinate)。

例如:

U3D局部坐标和全局坐标的示例分析

此时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移动到如图位置

U3D局部坐标和全局坐标的示例分析

使用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 将一个点从世界坐标系转换到局部坐标系

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:U3D局部坐标和全局坐标的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:java中哈希算法有什么用下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18