Построить структуру с префабы
Вы можете использовать код для процедурного создания копий префаб в определенной конфигурации. В следующем примере создается стена экземпляров блока префаб.
Создание блока префаб
Чтобы создать стену блоков, сначала необходимо иметь блоковый ассет префаб, с помощью которого можно создать стену.
- В Hierarchy щелкните правой кнопкой мыши и выберите 3D Объект > Куб.
- Перетащите куб в папку Ассеты в окне Project. Unity создает ассет префаб куба.
- Переименуйте ассет префаб в
Block. - Удалите исходный элемент куба из Hierarchy.
Создание скрипта, создающего экземпляры блоков
Создайте скрипт MonoBehaviour и дайте ему имя Wall. Добавьте следующий код в скрипт Wall:
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)
{
Vector3 pos = transform.position + new Vector3(x, y, 0);
Instantiate(block, pos, Quaternion.identity);
}
}
}
}
Присоедините скрипт к пустой GameObject
- Создайте пустой GameObject. Щелкните правой кнопкой мыши Hierarchy и выберите Create Empty.
- Присоедините скрипт
Wallк пустым GameObject. - Перетащите
Blockпрефаб ассетов в Блок поле, - Входите в режим Игра и Unity создает стену с
Blockпрефаб.
Вы также можете использовать код для размещения префабы в сетку или другие конфигурации. В следующем примере кубы размещены в круговой форме:
using UnityEngine;
public class CircleFormation : MonoBehaviour
{
// Instantiates prefabs in a circle formation
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;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
Vector3 pos = transform.position + new Vector3(x, 0, z);
float angleDegrees = -angle*Mathf.Rad2Deg;
Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
Instantiate(prefab, pos, rot);
}
}
}
Когда вы присоединяете скрипт к пустой GameObject и вступаете в режим воспроизведения, Unity генерирует кубы в следующей конфигурации: