Unity-understanding-prefabs-and-instantiation

提供:Dev Guides
移動先:案内検索

プレハブとインスタンス化の理解

オブジェクトのインスタンス化と破棄は、ゲームプレイ中に非常に重要と見なされます。 インスタンス化とは、単に存在させることを意味します。 ゲーム内でアイテムが表示または「スポーン」され、敵が死亡し、GUI要素が消滅し、ゲーム内で常にシーンが読み込まれます。 不要なオブジェクトを適切に取り除く方法と、自分で行うオブジェクトを取り込む方法を知ることは、さらに重要になります。

まず、「プレハブ」とは何かを理解しましょう。 プレハブは、Unityでインスタンス化がどのように機能するかを理解するために重要であると考えられています。

  • プレハブ*は、GameObjectの*青写真*に似ています。 プレハブは、ある意味では、シーンが作成されたときに存在していなかったとしても、複製してシーンに入れることができるGameObjectの*コピー*です。言い換えれば、プレハブを使用して*動的にGameObjects *を生成できます。

プレハブを作成するには、目的のGameObjectをシーン階層からプロジェクト Assets にドラッグするだけです。

プレハブ作成

ここで、GameObjectをインスタンス化するために、スクリプトで* Instantiate()メソッドを呼び出します。 *MonoBehaviour で定義されているこのメソッドは、GameObjectをパラメーターとして受け取るため、どのGameObjectを作成/複製するかがわかります。 また、新しくインスタンス化されたオブジェクトのトランスフォームを変更したり、ペアレント化するためのさまざまなオーバーライドがあります。

*Space* キーが押されるたびに、新しい*六角形*をインスタンス化してみましょう。
*Instantiator* という新しいスクリプトを作成して開きます。 *Update* メソッドで、以下のコードを入力します。

ここでは、 Input クラスの GetKeyDown メソッドを使用して、最後のフレームでプレーヤーが特定のボタンを押したかどうかを確認しています。 チェックを続けたいので、毎秒60回実行される Update に入れます。 GetKeyDownメソッドは、 KeyCode 列挙型(標準キーボード上のすべての可能なキーをリストする)で指定されたキーがそのフレームで押されると、 true を返します。

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
  //Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

上部のパブリックGameObject宣言は、以前のレッスンでRigidbody2D用に作成したものと同様のスロットを作成します。 ただし、このスロットは prefabs (エディター時)および gameObjects (ランタイム)のみを受け入れます。

スクリプトを保存し、コンパイルさせます。 完了したら、オブジェクト階層の右クリックメニューに移動し、[空の作成]を選択して、新しい*空*のGameObjectを作成します。

空の作成

このオブジェクトに Instatiator Object などのわかりやすい名前を付け、新しく作成したスクリプトを添付します。 GameObjectに表示されるスロットで、作成したプレハブをドラッグします。

Instatiator Object

ここでゲームを実行すると、スペースバーを押すと、プレハブの作成に使用したものと同じ新しい六角形オブジェクトが作成されます。 オブジェクト階層で作成されている各六角形を確認できます。 それらがゲームに表示されないのは、当面の間、それらはすべて*正確に*重ねて作成されるためです。

六角形オブジェクト

次のレッスンでは、オブジェクト破壊の概念を理解します。