C#言語の勉強でfor文は頻出だと思います。
今回は、Unityの使い方として、ループ・for文を用いて等間隔にオブジェクト生成ができるスクリプトを解説していきます。
オブジェクト生成個数と行列の個数をfor文で一括で出力できるようなコードにしました。
Unityでゲームオブジェクトとプレハブの生成
用意するものは全部で2つです。
1.C#スクリプトを起動させるための空のオブジェクト(CreateEmpty)
2.for文で等間隔にしたいオブジェクト
C#スクリプトを起動させるための空のオブジェクト(CreateEmpty)
①ヒエラルキータブで右クリックをして「CreateEmpty」を作成(名前はfor(テキトー))
②インスペクタータブにC#をAddComponent(名前はforsample)
のちのちfor文を追加した完成図になります。
インスペクタータブで様々な操作ができるようにします。
※この段階では無視して平気ですね!
for文で等間隔にしたいオブジェクト
①ヒエラルキータブで右クリックをして「Cube」を作成
②アセットタブにドラッグアンドドロップ
完成画面になれば問題なし!
C#のfor文で等間隔にオブジェクトを生成するコードの作成
C#のfor文のコード
そして、C#にてスクリプトを編集していきます。
実際に作成したC#スクリプトです。(コピぺ使用していただいて大丈夫)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class forsample : MonoBehaviour
{
public int n;
public int m;
public Transform prefab;
void Start()
{
int count = 0;
for (int i = 0; i < n; i++)
{
Instantiate(prefab, new Vector3(i % m * 2, 0, count / m * 2), Quaternion.identity);
count++;
}
}
}
では、順を追ってfor文を説明します。
変数の定義
インスペクタータブですべての値を操作したいので、基本publicで定義していきます。
以下コードの意味です。
nは何個のオブジェクトを置くか
mは1列で何個配置するか
prefabは生成したいオブジェクト
C#のfor文にて等間隔オブジェクト生成コード
for (int i = 0; i < n; i++)の部分は一種の宣言のようなもので、簡単に言うと「iという0である整数を定義して、n回までループし、1ずつiが増えていくよ」という意味です。
次に、countという変数を定義し、for文が回されるたびにcountが1からnまで増えていきます。
そして、iは0からn-1までの整数が代入されていきます。
つまり、nが10、mが5だとしたら1個1個生成されていくオブジェクトの座標は、
(0,0,0)→(1,0,0)→(2,0,0)→(3,0,0)→(4,0,0)
→(0,0,1)→(1,0,1)→(2,0,1)→(3,0,1)→(4,0,1)
と並べられます。
10個の座標のオブジェクトがInstantiate関数によって生成されていきます。
なお、*2は2の間隔をあけるよという意味なので自身の好きな数値でよいです。
ここで一度、四則演算を整理しましょう。
+ | 足し算 | 1+1=2 |
– | 引き算 | 1-1=0 |
* | 掛け算 | 2*2=4 |
/ | 割り算(余りは切り捨て) | 4/2=2 |
% | 割り算の余り | 7/3=1 |
補足として、「/」は割り算の商の部分のみが出力されます。余りは出力されません。
反対に、「%」は割り算の余りの部分を出力してくれます。
作成したC#のfor文にも用いているのでおさらいしておきましょう!
Unityでfor文の実行
Unity画面に戻ります。
NとMを好きな数値に設定して、CubeをPrefabのところにドラッグアンドドロップします。
実行ボタンを押して、、、やっと完成です!!
一連の流れによって、等間隔にオブジェクトが生成されていくのですね。
参考文献
最後に、for文のコードを生成するにあたって、InstantiateのUNITY公式リファレンスを参考にしました。
ご質問ございましたら、お問い合わせまで。
コメント