前提・実現したいこと
下記のコードにて原因がどうしてもわからず解決できないエラーがあるので、それを解決したいです。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object UnkomanColTri.OnTriggerEnter (UnityEngine.Collider other) (at Assets/C#Script/PlayerScript/UnkomanColTri.cs:41)
下記コードの下から4行目でこのエラーがでます。(下記コードはこの質問に関係のある部分のみを記載しています)
この行は爆発に当たったときにしか呼ばれないはずなのですが、エラーはSceneを実行した瞬間に出ます。
また、このエラーは毎回出るわけではなく、4~5回に一回くらいの確率で出ます。
そして、エラーが出る時は必ずこのエラーが2つ出ます。シーン内にこのコードは一つしかありません。
Rbがインスタンス化されていないということは、エラーが出た回は爆発時のRbを使った処理ができないはずです。
ですが、エラーが出た回でも爆発に当たるとなんの問題もなくRbを使った処理が実行されます。
さらに、このエラーが出るのが下から4行目のみというのが僕には不思議に思えます。もっと上の行で、同じようにRbを使った処理をしているのに、何故下から4行目でエラーが出るのかわかりません。
まとめると、
・このエラーはたまにしか出ない。
・出る時は2つ出る(Playerは1人しかいない)
・出る時はSceneが始まった瞬間出る
・爆発にあたってこのコードが呼ばれてもエラーは出ない
・エラーが出るコードより上にあるRbを使うコードで
はエラー出てない。
です。
該当のソースコード
void Start() { Rb = GetComponent<Rigidbody>(); } void OnCollisionEnter(Collision other) { //海に当たったら衝突判定をtrueにする if(other.gameObject.tag == "Sea") contact = true; //UnkoBulletに当たったら吹き飛ぶ if (other.gameObject.tag == "Bullet") { Rb.AddForce(Random.onUnitSphere * 70, ForceMode.Impulse); blownMode = true; } } void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Explosion") { Rb.AddForce(Random.onUnitSphere * 90, ForceMode.Impulse); blownMode = true; } }
試したこと
このスクリプトがアタッチされているプレイヤーObjはネットワークオブジェクトなので、Sceneが始まった瞬間ネットワークオブジェクトとして生成しています。
そこで、プレイヤーObjが生成されるよりも前にGetComponent<Rigidbody>()が呼ばれているからインスタンス化できないのではないかと思いました。なのでスクリプトが実行される順番を、このコードよりも先にプレイヤーObjのインスタンスを生成するスクリプトが先に実行されるように設定しました。
ですが、変わらずエラーが出ます。
そもそもこの仮設が成り立つとしたら、エラーが出た時はGetComponentでインスタンス化できなかった回はRbを使った処理ができないはずです。
でも、エラーが出たときでさえ、問題なくコードが動き処理できています。
Rbをインスタンス化するコードはこのコードの他にはありません。
なのでこの仮設は間違っています。
ですがこれ以上、何が原因でこのエラーが出ているのか僕にはもうわかりません。
「もしかしたらこれが原因では?」
といった憶測でも良いので、どなたかこのエラーの原因になっていそうなものを教えて下さい。
補足情報(FW/ツールのバージョンなど)
Unityバージョン
2019.3.4f1
回答1件
あなたの回答
tips
プレビュー