2017-01-29 4 views
2

敵が死んだときに表示されるコインプレハブをインスタンス化しようとしています。敵が死ぬと、以下のように、私はInstantiate()を呼び出す今スクリプトでプレファブへの参照を保存する(エディタ/インスペクタではない)

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

は当初、私はそのタグを使用してそれを取得し、プレハブへの参照を取得するには

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

をただしたときに、Iゲームをプレイしていて、敵が死んでも、何も生まれていないので、このエラーが出ています:

ArgumentException: The Object you want to instantiate is null.

私は何が間違っていたのか分かりません - インスタンス化したいプレハブを適切にタグ付けしていることを確認しました。

もう1つは、Resourcesフォルダを作成せずにこれを実行したいということです。それは可能ですか?

答えて

0

残念ながら、GameObject.FindGameObjectWithTag()は、現在のシーンに既に存在する特定のタグを持つアクティブなゲームオブジェクトのみを取得します。このメソッドを使用してAssetsフォルダ内のプレハブオブジェクトへの参照を取得しようとしているようですが、それはできないことです。その結果、nullを返してcoinSpawnに代入すると、後でcoinSpawnを使用しようとするとエラーが発生します。

アセットフォルダのオブジェクトへのパスを指定できるResources.Load()メソッドが必要な場合があります。ただ、使用することをGameObject.FindGameObjectWithTag()の代わりに:

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

とはい - あなたはそれを識別するために、代わりにそのタグのプレハブの名前を使用する必要がありますが、私はそれがすべての問題を提起しなければならないとは思いません。 (もしそうなら、それに応じて質問を更新してください。)

これは役に立ちます。ご質問がある場合はお知らせください。

+0

Unityは最新のバージョンでこの制限を考慮する必要があります。これを行うために、常に別の 'res'フォルダを作成するわけではありません! – utkdub

関連する問題