所以我有一个敌人的spawner,其方法是实例化预制件工作正常。简化为:
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:要实例化的预制件为空。
我做错了什么?
编辑: 所以我认为我无法使用New关键字创建Monobeaviour。我将其更改为:
enemyspawner = gameObject.AddComponent<EnemySpawner> ();
enemyspawner.setEnemies();
但那还不行。
答案 0 :(得分:1)
我刚刚阅读了有关更改的评论:
new
至enemyspawner = gameObject.AddComponent<EnemySpawner>();
但是,您没有正确解决问题,因为您的预制件public GameObject EnemyPrefab;
无法设置,您只能制定一个无法解决的解决方法。
使用新代码gameObject.AddComponent<EnemySpawner>();
您正在将一个脚本附加到Player GameObject,这将在将来为您带来问题。
创建一个空GameObject并将EnemySpawner
附加到其上,并将其命名为 EnemySpawnerObj 。
然后从另一个类调用函数setEnemies()
:
EnemySpawner spwner = GameObject.Find("EnemySpawnerObject").GetComponent<EnemySpawner>();
spwner.setEnemies();
所以你正在做的是在场景中查找名为 EnemySpawnerObject 的GameObject,然后你得到名为 EnemySpawner 的组件,然后你可以调用该类实例。