Inspectorでの参照
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 29/67。
フィールドには別のオブジェクトを格納できます。TransformやGameObjectなどの型を指定すると、Inspectorに空のスロットが表示されます。Hierarchyからオブジェクトをドラッグして、そのスロットにドロップします。このカメラスクリプトは、playerにドラッグされたオブジェクトを追従し、そのオブジェクトの3ユニット上、6ユニット後方に位置します。
public Transform player;
void Update()
{
transform.position = player.position + new Vector3(0, 3, -6);
}スロットが空のままだとNoneと表示され、それを使う最初の行で、毎フレーム次の例外が発生します。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)で囲むと、プレイヤーが設定されていないカメラは例外を発生させず、その場にとどまります。
チャレンジ
中級それぞれのガードは自分の持ち場まで歩きます。シーンでは、Guard1 の Inspector で、Post1 オブジェクトが post というフィールドに設定されています。Guard2 の持ち場はまだ作成されていないため、post スロットは空です。
- Guard スクリプトに、
postという名前のTransformフィールドを追加します。 - ガードは、毎秒
speed単位の速さで持ち場の位置まで歩き、持ち場が後から移動しても、その位置で停止します。 - 持ち場のスロットが空のガードは、エラーを出さずにその場にとどまります。
Play を押し、Hierarchy で各ガードを選択して Post スロットを確認してから、Check を押します。
自分で試してみよう
using UnityEngine;
public class Guard : MonoBehaviour
{
// post: この警備員が向かう Transform。Inspector で設定する
public float speed = 2f;
void Update()
{
// speed の速さで post に向かって歩く。post が未設定の警備員はその場にとどまる。
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。