[英]Instantiating prefabs from another script (The prefab you want to instantiate is null)
因此,我有一个敌人生成器,可以实例化工作正常的预制件。 简化:
public class EnemySpawner : MonoBehaviour {
public GameObject EnemyPrefab;
public void setEnemies()
{
Instantiate (EnemyPrefab, enemyPos, rotation);
}
void Start()
{
setEnemies();
}
}
这很好。 但是当我从其他脚本调用它时,它不起作用:
public class Player : MonoBehaviour {
public EnemySpawner enemyspawner;
void Update(){
if (Input.GetMouseButtonDown (0))
{
enemyspawner= new EnemySpawner();
enemyspawner.setEnemies();
}
}
我不断收到此错误:
ArgumentException:您要实例化的预制为null。
我究竟做错了什么?
编辑:所以我认为我无法通过使用New关键字创建Monobeaviour。我将其更改为:
enemyspawner = gameObject.AddComponent<EnemySpawner> ();
enemyspawner.setEnemies();
但这仍然行不通。
我刚刚读了您对更改的评论:
对enemyspawner = gameObject.AddComponent<EnemySpawner>();
new
enemyspawner = gameObject.AddComponent<EnemySpawner>();
但是,您没有正确解决问题,您只是做了一个无法解决的方法,因为您的预制public GameObject EnemyPrefab;
,将不会被设置。
使用新代码gameObject.AddComponent<EnemySpawner>();
您正在将脚本附加到Player GameObject,这将在将来给您带来问题。
创建一个空的EnemySpawner
并将EnemySpawner
附加到其上,并将其命名为EnemySpawnerObj 。
然后从另一个类调用函数setEnemies()
,您可以这样做:
EnemySpawner spwner = GameObject.Find("EnemySpawnerObject").GetComponent<EnemySpawner>();
spwner.setEnemies();
因此,您正在做的是在场景中查找名为EnemySpawnerObject的GameObject,然后获取名为EnemySpawner的组件,然后可以调用该类实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.