首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地地位和全球地位

本地地位和全球地位
EN

Stack Overflow用户
提问于 2020-11-19 20:59:49
回答 2查看 2.2K关注 0票数 1

我有一个target,它是用于target 位置(5000,0,0)cube的父级

代码语言:javascript
复制
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.localPosition = new Vector3(0, 0, 0);
cube.transform.localScale = new Vector3(100, 100, 100);
cube.name = "XXXXX";

cube.transform.parent = target.transform;

下面的代码应该在target中添加一个target,即(5000,0,0)中的全局

但是该对象被添加到全局中心本身(0,0,0)中。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 21:22:47

您在这里所做的是实例化一个立方体,在(0,0,0)处。在此之后,您将把多维数据集传递到当前对象。立方体仍然处于(0,0,0)的位置。因此,在本地,您的多维数据集将有一个本地偏移量,以确保多维数据集仍然位于创建它的原点。

但是,在本地或世界空间实例化对象时,您确实可以选择。在这里引用团结文档的话:

“默认情况下,新对象的父对象为null;它不是原始对象的”兄弟“。但是,您仍然可以使用重载的方法设置父对象。如果指定了父对象,并且没有指定位置和旋转,则原始对象的位置和旋转用于克隆对象的本地位置和旋转,如果instantiateInWorldSpace参数为真,则使用原始对象的世界位置和旋转。如果指定了位置和旋转,则将它们用作对象在世界空间中的位置和旋转。”

请注意,CreatePrimitive没有使用本地或世界空间的选项。由你自己来定位原始人。

所以,在你的例子中,你可以这样做:

代码语言:javascript
复制
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.parent = target.transform;
cube.transform.localPosition = new Vector3(0, 0, 0);
cube.transform.localScale = new Vector3(100, 100, 100);
cube.name = "XXXXX";

请注意,您先父级子,然后设置本地位置。您的第一个代码块设置了父代码的本地位置,这个位置就是世界,因为它不是任何东西的子代。但是,如果您首先父对象,那么您将本地位置设置为父对象的位置,现在您将看到您期望的行为。

票数 2
EN

Stack Overflow用户

发布于 2020-11-19 23:56:11

使用Transform.SetParent,将worldPositionStays参数设置为false

代码语言:javascript
复制
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.localPosition = new Vector3(0, 0, 0);
cube.transform.localScale = new Vector3(100, 100, 100);
cube.name = "XXXXX";

cube.transform.SetParent(target.transform, false);

从文件中:

该方法与父属性相同,但它还允许转换保持其局部方向而不是全局方向。这意味着,例如,如果GameObject先前位于其父服务器的旁边,将worldPositionStays设置为false将以相同的方式将GameObject移动到其新父节点的旁边。 worldPositionStays参数的默认值为true。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64919918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档