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)で囲むと、プレイヤーがいないカメラはエラーを発生させず、その場にとどまります。
チャレンジ
中級各ガードを、Inspectorで指定した配置場所へ向かわせます。
- フィールド
public Transform post;を追加します。Guard1のスロットにはPost1を設定し、Guard2のスロットは空にします。 Update()内で、post == nullの場合はreturn;して、配置場所がないガードがその場にとどまるようにします。- 次に、
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プレイグラウンド