Menu
CoddyTech

Findより参照

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 45/67。

スクリプトが別のオブジェクトを参照する方法は4つあります。Inspectorで設定するフィールド、名前によるGameObject.Find、タグ検索、型によるFindAnyObjectByTypeです。最初からシーンにあるオブジェクトには、UnityのコードでInspectorのフィールドを使う理由が3つあります。

  • 速度。ゲームの開始前に参照が設定されます。検索のたびにシーン内のオブジェクトを調べます。Update()内で検索すると、毎フレーム調べることになります。
  • 安全性。文字列内の名前は、誰かがオブジェクト名を変更すると機能しなくなります。Findはnullを返し、エラーはそのオブジェクトを使用する行で後から発生します。Inspectorのフィールドが空の場合はUnassignedReferenceExceptionが発生し、フィールド名とスクリプト名が示されます。
  • 明確さ。Inspectorを見ると、スクリプトが何に依存しているかがわかります。Findの呼び出しでは、コードの中に隠れてしまいます。
// Inspector で一度設定するだけ:検索は不要で、名前を変更しても影響しない
[SerializeField] private Transform door;

// 毎フレーム検索され、door の名前が変更されると null になる
void Update()
{
    Transform d = GameObject.Find("Door").transform;
}

検索が適している場面もあります。プレイ中に生成されるオブジェクトのように、ゲームの実行後にのみ存在するオブジェクトや、どのシーンでも動作する必要があるスクリプトです。その場合でも、Start()で一度だけ検索し、結果をフィールドに保存してください。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン