これは私には一度も起こったことがないので、少し混乱しています。
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
これによりエラーがスローされますが、オブジェクトは実際にインスタンス化され、すべてが意図したとおりに機能します。このエラーを何度再現しても、プログラムは停止しません。
このエラーを無視できますか、または表示されない問題がありますか?
これは私には一度も起こったことがないので、少し混乱しています。
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
これによりエラーがスローされますが、オブジェクトは実際にインスタンス化され、すべてが意図したとおりに機能します。このエラーを何度再現しても、プログラムは停止しません。
このエラーを無視できますか、または表示されない問題がありますか?
回答:
Intantiate()行が例外をスローしてもオブジェクトが正しくインスタンス化される場合、エラーはスクリプトの別のインスタンスから発生しています。誤ってシーンに2つ目のコピーがある可能性があります。
1つのインスタンスが正しく構成Instantiate()され、エラーなしで期待どおりに実行されるため、オブジェクトは必要に応じて作成されます。
別のインスタンスが正しく構成されておらず、エラーがスローされます。ただし、正しく構成されたインスタンスを表示しているだけの場合、このエラーはどこからも発生していないようで、目に見える結果はありません。
不要なシーンの重複を追跡するのに役立つように、開始時または問題のある行の直前のヌルチェックでオブジェクトへのパスを印刷できます。
このエラーを絶対に無視しないでください。
せいぜい、それは不必要に計算サイクルを燃やしています。最悪の場合、それはあなたのゲームがあなたが完全に理解していないことをしているという兆候であり、それは将来のはるかに大きな問題の根源となり得る。
あなたの質問に直接答えることから始めましょう:
動作しますが、エラーを無視できますか?
あなたはできました。何かがうまくいかないことを意味するので、そうすべきではありません。このエラーに慣れるでしょうが、別のエラーを「隠す」か、引き起こす可能性があります。
現在、エラーメッセージが表示されますが、引き続き正常に機能します。反対に、機能せず、フィードバックを持たない(または認識しない)理由は、はるかに悪いです!
これがどこから来たのかを知るには、この全体をいくつかの行に分割します。
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);
Instantiate()。 prefabですnull。 Resources.Load返しますnull。 Resources.Loadは、「アセットpathが見つかった場合にアセットを返します。見つからない場合はnullを返します。」resourceLocation)が見つからないことを意味しますこのパスに問題があるため、最初のステップは、Debug.Logを使用して、実際に何が実際に行われるかを確認することです。「すべてが意図したとおりに動作する」ため、1つのバージョンが動作し、他のバージョンがこのエラーを発生させる場所で重複が発生している可能性があります。
その場合、Debug.Logの2パラメーターバージョンを使用することをお勧めしますDebug.Log(resourceLocation, gameObject);。Unityエディターでログメッセージをクリックすると、メッセージの送信元が選択さGameObjectれます。