如何在Unity3D中的多维数据集中创建对象?

时间:2013-08-13 19:21:47

标签: unity3d

我在Unity3D中有一个立方体。我知道它的8个顶点的向量。它围绕所有轴以3D方式旋转和缩放。如何在运行时在该多维数据集内的随机位置实例化一个对象?

2 个答案:

答案 0 :(得分:2)

如果您知道多维数据集的8个顶点,则可以轻松地将此多维数据集内的对象随机化。考虑随机对象在Transform的位置具有xyz值。 UnityScript和C#都提供了一个很好的Random类,它可以很容易地为您提供两个值之间的随机数。使用此课程三次:

  1. 在最大x值和最小x之间创建一个随机数 所有8个顶点的值。
  2. 在最大y值和最小y之间创建一个随机数 所有8个顶点的值。
  3. 在最大z值和最小z之间创建一个随机数 所有8个顶点的值。
  4. 接下来,创建必须在此多维数据集中实例化的游戏对象,并使用您从上述三个步骤计算出的xyz值。这将在多维数据集中随机创建您的对象。

    请注意,如果您的随机对象具有一定的大小,则技术上可以在多维数据集的边缘上随机生成对象,从而让随机对象“伸出”多维数据集。为避免这种情况,请确保从随机化函数中输入的最大值减去对象大小的一半,并从随机化函数中输入的最小值中加上对象大小的一半。

    编辑:要在旋转对象时获取您的积分,您可以使用cube.transform.localScale / 2。这将使您获得立方体角落之一的局部位置。 Vector3.Scale(cube.transform.localScale / 2, new Vector3(1,1,-1))会给你一个其他人(1和-1的不同组合会让你全部八个)。然后,要在世界空间中找到它们,请使用cube.transform.TransformPoint()

答案 1 :(得分:0)

如果我理解你正在尝试做的事情,我可能会建议如下内容。

public class Instantiation : MonoBehaviour {

    void Start() {
        for (int y = 0; y < 5; y++) {
            for (int x = 0; x < 5; x++) {
                GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                cube.AddComponent<Rigidbody>();
                cube.transform.position = new Vector3(x, y, 0);
            }
        }
    }
}

它将在new transform.position创建GameObject立方体(或任何你想要的)。然而,不是它的位置是特定的Vector3,而是将它作为来自新方法的随机生成的Vector3。将创建此方法以随机化x和特定边界内的y和z的数字。然后,您只需将其输入新位置。

我希望这是有道理的,我不是一位出色的老师。

编辑:http://docs.unity3d.com/Documentation/Manual/InstantiatingPrefabs.html这是实例化预制件的一个很好的参考。您的运行时实例化对象应该是预制件。