我在Unity3D中有一个立方体。我知道它的8个顶点的向量。它围绕所有轴以3D方式旋转和缩放。如何在运行时在该多维数据集内的随机位置实例化一个对象?
答案 0 :(得分:2)
如果您知道多维数据集的8个顶点,则可以轻松地将此多维数据集内的对象随机化。考虑随机对象在Transform的位置具有x
,y
和z
值。 UnityScript和C#都提供了一个很好的Random
类,它可以很容易地为您提供两个值之间的随机数。使用此课程三次:
x
值和最小x
之间创建一个随机数
所有8个顶点的值。y
值和最小y
之间创建一个随机数
所有8个顶点的值。z
值和最小z
之间创建一个随机数
所有8个顶点的值。接下来,创建必须在此多维数据集中实例化的游戏对象,并使用您从上述三个步骤计算出的x
,y
和z
值。这将在多维数据集中随机创建您的对象。
请注意,如果您的随机对象具有一定的大小,则技术上可以在多维数据集的边缘上随机生成对象,从而让随机对象“伸出”多维数据集。为避免这种情况,请确保从随机化函数中输入的最大值减去对象大小的一半,并从随机化函数中输入的最小值中加上对象大小的一半。
编辑:要在旋转对象时获取您的积分,您可以使用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这是实例化预制件的一个很好的参考。您的运行时实例化对象应该是预制件。