【Unity】2つのゲームオブジェクトに同じスクリプトがアタッチされている場合のデバッグ

複数のゲームオブジェクトに同じスクリプトがアタッチされている場合、違うインスタンスが作成されているので、独立した動きをします

コードの調査のため、Debug.Logを表示したり、ブレークポイントを登録した場合、そのままではどちらにアタッチされているコードかわかりません

今回はその場合、どちらにアタッチされているスクリプトかを確認する方法をみていきましょう

シーン構成

2つの空のゲームオブジェクトを作成し、それぞれにTestスクリプトをアタッチしています

テストコード

Debug.Logでどのゲームオブジェクトのスクリプトかを確認する方法

確認したい処理(デバッグしたい処理)のところに次のコードを挿入します

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        Debug.Log($"{gameObject.name}のスクリプト");

        // 確認したい処理など
    }
}

Debug.Log

これはUnityで使用されるデバッグメッセージをコンソールに出力するためのメソッドです。DebugクラスはUnityエディター上でのデバッグとログ出力を管理するために使用されます。

${gameObject.name}

これは文字列補間(string interpolation)を示す部分で、$と{}を使用して文字列内に変数や式を埋め込むためのC#の機能です

gameObjectは、Unity内で使用される特別な変数で、スクリプトがアタッチされているゲームオブジェクトを表しますgameObject.nameは、現在のゲームオブジェクトの名前を取得するプロパティです。ゲームオブジェクトは通常、Unityエディター内で名前が設定されます。このコードでは、gameObject.nameによって現在のゲームオブジェクトの名前が取得され、それが文字列の一部として使用されます。具体的には、現在のゲームオブジェクトの名前と「のスクリプト」という文字列が結合されます。

結果として、このコードは現在のゲームオブジェクトの名前と「のスクリプト」を含むメッセージをコンソールに出力します。このようなログ出力は、ゲーム開発中にプログラムの動作やデバッグ情報を追跡するのに役立ちます。特定のスクリプトがどのゲームオブジェクトにアタッチされているかを確認するために使用できます。

結果

ObjAのスクリプト
ObjBのスクリプト

VisualStudioでUnityエディターのデバッグをする方法

どのゲームオブジェクトでヒットしたか確認する方法

次の手順で、デバッグを実行します
VisualStudio単体でのブレークポイント登録とは準備の手順が一部追加されます

ブレークポイントでストップしたら、ローカルタブで確認

(ローカルタブが表示されていない場合)

特定のゲームオブジェクトの処理の場合の時のみ、ブレークポイントがヒットするようにする

ブレークポイントがヒットする条件を登録します
登録画面は次のように簡単に表示させることができます

条件として、gameObject.name == “ObjB"が trueの時を設定します
この条件式は必要の応じて変更してください

結果

Unity

Posted by hidepon