Menu
CoddyTech

プレハブとInstantiate

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

プレハブとは、テンプレートとして保存されたGameObjectです。HierarchyからオブジェクトをProjectウィンドウにドラッグすると、UnityはそのすべてのコンポーネントとInspectorの値を一緒に保存します。プレハブ自体はシーン内にはありません。スクリプトでは、ほかの参照と同様にフィールドを通じて取得します。public GameObject parcelPrefab;と宣言し、Inspectorでプレハブをそのフィールドにドラッグします。

Instantiate(prefab, position, rotation)はシーン内にプレハブのコピーを作成し、それを返します。この配送ドローンは、Spaceキーを押すたびに自身の位置に荷物を落とします。Quaternion.identityは回転なしを意味します。

public GameObject parcelPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Instantiate(parcelPrefab, transform.position, Quaternion.identity);
    }
}

キーを押すたびに、HierarchyにParcel(Clone)という名前のオブジェクトがもう1つ追加されます。プレハブは元のままなので、コピーはすべて同じ値から始まります。ここではGetKeyDownが重要です。GetKeyを使うと、Spaceキーを0.5秒間押し続けた場合、フレームごとに1つずつ、約30個の荷物を落とすことになります。

challenge icon

チャレンジ

中級

矢印キーでプレイヤーはすでに移動します。クリックするたびに、プレイヤーの上にコインを生成しましょう。

  • GameObject 型の coinPrefab という名前の public フィールドを追加します。フィールドができると、シーンによってCoinプレハブが自動的に設定されます。
  • マウスの左ボタンをクリックしたとき、プレイヤーの2単位上に、回転なしでコインを1つ生成します。

Playを押し、何度か移動してクリックしてから、Checkを押します。

自分で試してみよう

using UnityEngine;

public class CoinDropper : MonoBehaviour
{
    public float speed = 4f;
    // coinPrefab: Coin プレハブを設定する public な GameObject フィールド

    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
        }

        // Click: プレイヤーの 2 ユニット上にコインを生成する
    }
}
quiz icon腕試し

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

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