Unity 6.3
0 онлайн 102 гостей 3 в системе
Вход
GameObjects Шаг 54 из 56

Построить структуру с префабы

Вы можете использовать код для процедурного создания копий префаб в определенной конфигурации. В следующем примере создается стена экземпляров блока префаб.

Создание блока префаб

Чтобы создать стену блоков, сначала необходимо иметь блоковый ассет префаб, с помощью которого можно создать стену.

  1. В Hierarchy щелкните правой кнопкой мыши и выберите 3D Объект > Куб.
  2. Перетащите куб в папку Ассеты в окне Project. Unity создает ассет префаб куба.
  3. Переименуйте ассет префаб в Block.
  4. Удалите исходный элемент куба из 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

  1. Создайте пустой GameObject. Щелкните правой кнопкой мыши Hierarchy и выберите Create Empty.
  2. Присоедините скрипт Wall к пустым GameObject.
  3. Перетащите Block префаб ассетов в Блок поле,
  4. Входите в режим Игра и Unity создает стену с Block префаб.
Стена, построенная из 4 рядов по 10 блоков. Пустой GameObject выбран в Inspector, а Блок префаб назначен в поле Блок.
Стена, построенная из 4 рядов по 10 блоков. Пустой GameObject выбран в Inspector, а Блок префаб назначен в поле Блок.

Вы также можете использовать код для размещения префабы в сетку или другие конфигурации. В следующем примере кубы размещены в круговой форме:

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 генерирует кубы в следующей конфигурации:

Круговое расположение блоков.
Круговое расположение блоков.

Дополнительные ресурсы