首页 > 解决方案 > 局部位置和全局位置

问题描述

我有一个 For Position(5000, 0, 0)target的父级cubetarget

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;

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

但是对象是添加在全局中心本身(0,0,0)

我究竟做错了什么?

在此处输入图像描述

标签: c#unity3d

解决方案


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

但是,在本地或世界空间中实例化对象时,您确实可以选择。在此处引用 Unity文档

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

请注意,CreatePrimitive没有使用本地或世界空间的选项。由您自己定位基元。

所以,在你的情况下,你可能想要这样做:

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";

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


推荐阅读