回答
あなたの質問に直接答えることから始めましょう:
動作しますが、エラーを無視できますか?
あなたはできました。何かがうまくいかないことを意味するので、そうすべきではありません。このエラーに慣れるでしょうが、別のエラーを「隠す」か、引き起こす可能性があります。
現在、エラーメッセージが表示されますが、引き続き正常に機能します。反対に、機能せず、フィードバックを持たない(または認識しない)理由は、はるかに悪いです!
助言
これがどこから来たのかを知るには、この全体をいくつかの行に分割します。
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
エラーは、どの行で発生したかを示すだけです。このコードでエラーが発生した場合、行番号はここでどの部分が間違っていたかについての詳細を示します。また、の汎用バージョンを使用することをお勧めします。これによりResources.Load
、実際に心配する必要が1つ少なくなります。
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
理由を見つける
- さて、Unityの経験から、「インスタンス化したいオブジェクトがnullである」の原因はであることがわかります
Instantiate()
。
- つまり、ということ
prefab
ですnull
。
- したがって、それはを
Resources.Load
返しますnull
。
- のドキュメントに
Resources.Load
は、「アセットpath
が見つかった場合にアセットを返します。見つからない場合はnullを返します。」
- つまり、指定されたパス(私が呼び出した文字列
resourceLocation
)が見つからないことを意味します
このパスに問題があるため、最初のステップは、Debug.Logを使用して、実際に何が実際に行われるかを確認することです。「すべてが意図したとおりに動作する」ため、1つのバージョンが動作し、他のバージョンがこのエラーを発生させる場所で重複が発生している可能性があります。
その場合、Debug.Logの2パラメーターバージョンを使用することをお勧めしますDebug.Log(resourceLocation, gameObject);
。Unityエディターでログメッセージをクリックすると、メッセージの送信元が選択さGameObject
れます。