#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. Рад помочь! 🙂