通过脚本存储对变量中预制件的引用(不是由编辑器/检查器)

时间:2017-01-29 06:02:24

标签: c# unity3d

我试图实例化敌人死亡时出现的硬币预制件。

要最初获得对预制件的引用,我使用其标签检索它:

private GameObject coinSpawn;
Start(){
    coinSpawn = GameObject.FindGameObjectWithTag("xxx");
} 

现在当敌人死亡时,我按如下方式致电Instantiate()

Instantiate(coinSpawn, transform.position, Quaternion.identity);

然而,当我玩游戏并且敌人死亡时,没有任何东西产生,我得到了这个错误:

  

ArgumentException:要实例化的Object为null。

我不明白我做错了什么 - 我确认我已经正确标记了我要实例化的预制件。

还有一件事是我想在不创建Resources文件夹的情况下这样做。这可能吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,GameObject.FindGameObjectWithTag()仅检索具有当前场景中已存在的给定标记的活动GameObject。听起来你正试图使用​​这种方法来检索对Assets文件夹中的预制对象的引用,这是它无法做到的。因此,该方法返回null并将其分配给coinSpawn,当您稍后尝试使用coinSpawn时会导致错误。

您可能需要Resources.Load()方法,您可以在Assets文件夹中提供对象的路径。只需使用它代替GameObject.FindGameObjectWithTag()

private GameObject coinSpawn;
Start(){
    coinSpawn = Resources.Load("path_to_prefab") as GameObject;
}

是的 - 您必须使用预制件的名称而不是其标签来识别它,但我不认为这会造成任何问题。 (如果有,请相应地更新您的问题并附上说明。)

希望这有帮助!如果您有任何问题,请告诉我。