Version: Unity 6.0 (6000.0)
言語 : 日本語
プレハブのインスタンス化の概要
砲弾と爆発のインスタンス化

プレハブを使用した構造体のビルド

コードを使用すると、特定の設定で多くのプレハブのコピーをほとんど瞬時に作成できます。このように構造をコードで生成することを手続き型生成といいます。

ブロックインスタンスの壁の作成

このタスクでは、ブロックインスタンスの壁を作成する方法を示します。

スクリプトをゲームオブジェクトにアタッチします。

  1. MonoBehaviour スクリプトを作成し、Wall という名前を付けます。
  2. Wall スクリプトの下にコードを貼り付けます。
  3. Wall スクリプトをシーンの空のゲームオブジェクトにアタッチします。
using UnityEngine;
public class Wall : MonoBehaviour
{
   public GameObject block;
   public int width = 10;
   public int height = 4;
  
   void Start()
   {
       for (int y=0; y<height; ++y)
       {
           for (int x=0; x<width; ++x)
           {
               Instantiate(block, new Vector3(x,y,0), Quaternion.identity);
           }
       }       
   }
}

結果インスペクターは Block 変数を None とともにフィールドに表示します。値 None は、この変数にはプレハブがまだ割り当てられていないことを意味します。

プレハブがまだ割り当てられていない Block 変数
プレハブがまだ割り当てられていない Block 変数

Block 変数へのプレハブの割り当て

上記のスクリプト例は、プレハブを Block 変数に割り当てるまで機能しません。簡単なブロックプレハブを作成するには、以下の手順を行います。

  1. GameObject > 3D Object > Cube を選択します。

  2. キューブを Hierarchy ウィンドウから Project ウィンドウの Assets フォルダーにドラッグします。こうすると、プレハブアセットが作成されます。

  3. プレハブの名前を Block に変更します。

  4. Block プレハブがアセットになったので、Hierarchy からキューブを安全に削除できます。

  5. Block プレハブを作成したので、それを Block 変数に割り当てることができます。元のゲームオブジェクト (Wall スクリプトがアタッチされているゲームオブジェクト) を選択します。次に、Block プレハブを Project ウィンドウから Block 変数スロット (None と表示) にドラッグします。

Block プレハブが割り当てられた Block 変数
Block プレハブが割り当てられた Block 変数

この設定が完了したら、Play をクリックすると、プレハブを使用した Unity ビルドが表示されます。

上記の例で生成された、10 ブロック 4 列でビルドされた壁。
上記の例で生成された、10 ブロック 4 列でビルドされた壁。

これは、Unity で何度も使用できる柔軟なワークフローパターンです。このスクリプトではプレハブを使用しているため、プレハブを簡単に置き換えたり編集したりして、スクリプトを変えることなく壁のレンガのプロパティを変更することができます。また、異なるプレハブが割り当てられたシーン内の他のゲームオブジェクトに Wall スクリプトを使用して、さまざまなタイプのプレハブで作られたさまざまな壁を作成することもできます。

コードを使用すると、作成するゲームやアプリケーションに合わせて、ゲームオブジェクトをグリッド、円状、ランダムに散らばったもの、その他の考えうる配置に置くことがます。インスタンスを円状に配置する別の例を次に示します。

using UnityEngine;
public class CircleFormation : MonoBehaviour
{
   // Instantiates prefabs in a circle formation
   public GameObject prefab;
   public int numberOfObjects = 20;
   public float radius = 5f;
   void Start()
   {
       for (int i = 0; i < numberOfObjects; i++)
       {
           float angle = i * Mathf.PI * 2 / numberOfObjects;
           float x = Mathf.Cos(angle) * radius;
           float z = Mathf.Sin(angle) * radius;
           Vector3 pos = transform.position + new Vector3(x, 0, z);
           float angleDegrees = -angle*Mathf.Rad2Deg;
           Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
           Instantiate(prefab, pos, rot);
       }
   }
}
上記の例で生成されたブロックの円状配置
上記の例で生成されたブロックの円状配置

追加リソース

プレハブのインスタンス化の概要
砲弾と爆発のインスタンス化
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961