Unity事例ノート

UNITY

削除したオブジェクトへの参照をやめる

Destroyしたオブジェクトへの参照が継続すれば、以下のようなエラーが出ることがあります。

MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

この場合、下記のようにnullを使ってエラーを回避してみましょう。

オブジェクトの準備

まずは通常の動きを作成してみます。

以下のように、Sphereを十字キーでX:-1まで動かせば、Cubeが浮上できない仕組みを作ります。

平面、Sphere、Cubeのオブジェクトをそれぞれ1個ずつ用意して、SphereのX座標は0にします。

SphereMove.csを作成して、Sphereに追加します。

SphereMove.csを記述しましょう。

ここではboolを使用して、Xが-1に到達した際のフラグを作成しています。

次は、Cubeにリジッドボディを追加します。

CubeUp.csを作成して、Cubeに追加します。

CubeUp.csを記述します。

ゲームプレイしてみます。

クリックでCubeが浮上しますが、Sphereを動かしてXを-1以下まで移動させると、Cubeは動きません。

エラーが出るケース

ここで、SphereがX:-1に到達したとき、Sphereを削除した上で、Cubeを操作できるようにしてみます。

もう一度、SphereMove.csを開き、Destroy(this.gameObject); の1行を追加します。

ゲームプレイして確認してみましょう。

Sphereが消えると、エラーが発生します。

Cube側でsphereBoolを参照しているにもかかわらず、Sphereオブジェクトが消失してしまっています。

このエラーを回避するため、nullを使った条件文を追加しましょう。

CubeUp.csを開き、if (sphere!= null) を追加します。

ゲームプレイしてみましょう。

Sphereが消失している間は、処理を実行しないので、エラーは表示されません。

もしエラーが出たときは、オブジェクトが存在していれば参照するように、nullを使ってエラー回避を試してみましょう。


SCHOOL教室案内