Получить сборку в сценарии экземпляра объекта — Unity 2D

#unity3d

Вопрос:

Я создаю игру space invaders, и у меня есть сценарий, прикрепленный к отдельному игровому объекту, который создает экземпляры врагов. Я могу перетащить сборный дом и заставить его работать, но тогда я хочу, чтобы враги сами создавали пули, причем пуля является сборным домом.

Я начал с простого создания переменной для маркера, но как я получу доступ к сборке в скрипте, как если бы я просто перетащил ее в сборку, она не будет использоваться после создания экземпляра сборки.

 GameObject bullet;

void Start() {
    bullet = // Insert Function to access prefab
}
 

Спасибо

Ответ №1:

Если вы поместите сборную сборку в корневую папку с именем «Ресурсы», вы можете загружать сборные сборки оттуда следующим образом:

 Instantiate(Resources.Load("YourBulletPrefab"));
 

Но вы также можете сделать переменную общедоступной…

 public GameObject bullet; // or use private   [SerializeField]
 

…а затем в Инспектор, перетащите свой сборный дом. В этом случае нет необходимости инициализировать его Start() .

Комментарии:

1. Итак, если у меня есть папка с именем «Сборные» в папке «Активы», могу ли я сделать это так, или мне нужно перетащить ее из папки «Активы»?

2. Это должно быть Assets/Resources для первого подхода. Вы Assets/Resources/Prefabs также можете попробовать, когда будете использовать Resources.Load("Prefabs/YourBulletPrefab"); потом.

Ответ №2:

Я обычно решаю эту проблему, добавляя public GameObject bullet переменную в сценарий «враг» И сценарий «порождающий врага». В инспекторе вы даете ссылку на «порождение врага», чтобы получить доступ к сборке пуль. А затем, когда вы порождаете врага, вы передаете его ссылку врагу. Что-то вроде этого:

Вражеский сценарий:

 class Enemy
{
   public GameObject bullet;

   private Shoot()
   {
       //Shoot bullet
   }    
}
 

Сценарий EnemySpawner:

 class EnemySpawner
{
   public GameObject enemy;
   public GameObject bullet;

   private Spawn()
   {
       GameObject newEnemy = Instantiate(enemy);
       enemy.GetComponent<Enemy>().bullet = bullet;
   }    
}
 

Сделав это, вы также сможете получить доступ к пулям позже.

Комментарии:

1. Спасибо, это тоже помогло 🙂 Немного поздно, хотя (для меня), так как я только что проверил

2. Рад помочь! 🙂