Menu
CoddyTech

Inspector内の参照

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 43/85。

フィールドには別のオブジェクトを格納できます。TransformやGameObjectなどの型を指定すると、インスペクターに空のスロットが表示されます。そこへヒエラルキーからオブジェクトをドラッグして入れます。このカメラスクリプトは、playerにドラッグされたオブジェクトを追いかけ、その3単位上、6単位後ろにとどまります。

public Transform player;

void Update()
{
    transform.position = player.position + new Vector3(0, 3, -6);
}

スロットが空のままだとなしと表示され、それを使う最初の行で毎フレーム次のエラーが発生します。UnassignedReferenceException: The variable player of CameraFollow has not been assigned.メッセージの次の行には、対処方法が示されています。You probably need to assign the player variable of the CameraFollow script in the inspector.フィールド名とスクリプト名が示されているので、どのスロットに値を入れればよいかがわかります。

スロットが空でも動作するべきスクリプトもあります。Unityでは空のスロットはnullと等しいものとして比較されるため、そのようなスクリプトは使用前に確認します。Update()内の行をif (player != null)で囲むと、プレイヤーがいないカメラはエラーを発生させず、その場にとどまります。

challenge icon

チャレンジ

中級

各ガードを、Inspectorで指定した配置場所へ向かわせます。

  1. フィールド public Transform post; を追加します。Guard1のスロットにはPost1を設定し、Guard2のスロットは空にします。
  2. Update() 内で、post == null の場合は return; して、配置場所がないガードがその場にとどまるようにします。
  3. 次に、Vector3.MoveTowards(transform.position, post.position, speed * Time.deltaTime) を使って移動させます。

「プレイ」を押します。Guard1は配置場所まで歩き、Guard2は待機します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Guard : MonoBehaviour
{
    // post: このガードが向かう Transform。Inspector で設定する
    public float speed = 2f;

    void Update()
    {
        // speed に従って post へ歩く。post スロットが空のガードはその場にとどまる。
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド