我对团结还很陌生,所以如果我用怪异的口吻来表达歉意。
我正在尝试创建一个较大的区域,每个“砖块”都有机会生成随机对象。我可以将它用于单个空的GameObject,但是要制作一个较大的网格将需要一遍又一遍地复制/粘贴同一对象并设置其位置。
答案 0 :(得分:1)
以特定模式放置一堆对象假设您要 将一堆对象放置成网格或圆形图案。传统上 可以通过以下任何一种方式完成:
完全通过代码构建对象。这很乏味!进入 脚本中的值既缓慢,直观又不值得 麻烦。制作完全绑定的对象,将其复制并放置 在场景中多次。这很繁琐,并且放置对象 准确地在网格中很难。所以将Instantiate()与Prefab一起使用 代替!我们认为您知道为什么预制件在 这些情况。以下是这些情况所需的代码:
// Instantiates a prefab in a circle
public GameObject prefab;
public int numberOfObjects = 20;
public float radius = 5f;
void Start()
{
for (int i = 0; i < numberOfObjects; i++)
{
float angle = i * Mathf.PI * 2 / numberOfObjects;
Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;
Instantiate(prefab, pos, Quaternion.identity);
}
}
// Instantiates a prefab in a grid
public GameObject prefab;
public float gridX = 5f;
public float gridY = 5f;
public float spacing = 2f;
void Start()
{
for (int y = 0; y < gridY; y++)
{
for (int x = 0; x < gridX; x++)
{
Vector3 pos = new Vector3(x, 0, y) * spacing;
Instantiate(prefab, pos, Quaternion.identity);
}
}
}
答案 1 :(得分:0)
为了补充 Chico3001 提供的出色答案,文档确实提供了关于如何使用块预制件制作墙壁的非常好的解释。用在 x 轴上旋转 90 度的四元数替换块将创建一个平面图块,并调整代码以便您使用 z 轴而不是 y 轴将其展开。这是代码,from the same section of the manual 引用了 Chico3001:
using UnityEngine;
public class Wall : MonoBehaviour
{
public GameObject block;
public int width = 10;
public int height = 4;
void Start()
{
for (int y=0; y<height; ++y)
{
for (int x=0; x<width; ++x)
{
Instantiate(block, new Vector3(x,y,0), Quaternion.identity);
}
}
}
}