UnityでGameObjectのPrefab化、動的インスタンス生成&物理演算エンジンRigidbodyを使う基本ゲーム開発初心者のためのUnity入門(12)(2/6 ページ)

» 2017年02月06日 05時00分 公開
[薬師寺国安PROJECT KySS]

スクリプトを使ってCubeを動的にたくさん生成

 次に、Unityメニューの「GameObject」→「Create Empty」と選択して空のゲームオブジェクトを作成すると、Hierarchy内にゲームオブジェクトが作成される。

 このゲームオブジェクトを選択しInspector内の「Add Component」ボタンから「New Script」を選択する。「Name」に「AddCubeScript」と指定して「Language」に「C Sharp」を選択する。「Create and Add」ボタンをクリックすると、ゲームオブジェクトにスクリプトが追加される(図6)。

図6 ゲームオブジェクトにスクリプトが追加された

 図6の画面で、「Script」の「AddCubeScript」をダブルクリックする。するとVisual Studioのエディターが起動してコードの記述が可能になる。

 void Update()メソッド内にリスト1のコードを書いていく。

public Transform myCube;
void Update () {
    if(Input.GetKey(KeyCode.Space))
    {
        Instantiate(myCube, transform.position, transform.rotation);
    }
}
リスト1 空からCubeが降ってくる処理(AddCubeScript.cs)

オブジェクトの位置、回転、サイズを扱う「Transform」クラス

 まず、publicな「Transform」型の変数「myCube」を宣言する。「Transform」クラスは、オブジェクトの位置、回転、サイズを扱うクラスだ。Publicで宣言した変数は、ビルドをすると、Inspector内にプロパティとして表示される。

Update関数内に処理を記述

 Update関数内で、「スペース」キーが押されたときに、動的に「Cube」を作成して落下させる処理を記述している。

引数で指定したゲームオブジェクトのインスタンスを作成する「Instantiate」関数

 「Instantiate」は引数で指定したゲームオブジェクトを作成する関数だ。書式は下記のようになる。

Instantiate({ゲームオブジェクト},{位置},{角度})


 {ゲームオブジェクト}には「Transform」型の「myCube」を指定し、{位置}にはオブジェクトの「position」、{角度}にはオブジェクトの「rotation」を指定している。

 コードはこれだけだ。書いた後は必ずメニューからビルドしておくことを忘れないようにしよう。

「private」変数では、プロパティとして表示されない

 Unityの画面に戻って、ゲームオブジェクトのInspectorの「Script」を見ると、図6とは違って、「My Cube」というプロパティが追加されている(図7)。

図7 「My Cube」項目が追加された

 なお、リスト1の1行目で「public Transform myCube」と宣言したために、Inspector内にプロパティとして表示されたのだ。これを「private Transform myCube;」と宣言するとプロパティとして表示されない。

JavaScriptのコード

 JavaScriptのコードも記載しておく、コードの解説はC#と同じだ。JavaScriptで書きたい場合は、連載第5回のコラム「スクリプトエディタの切り替え」を参照されたい。

var myCube:Transform;
function Update () {
  if(Input.GetKey(KeyCode.Space))
  {
    Instantiate(myCube,transform.position,transform.rotation);
  }
}
リスト1 空からCubeが降ってくる処理(AddCubeScriptJS.js)

上から落とすため、Cubeを上方に配置

 図7の「My Cube」の「None Transform」と記述されている箇所にProjectの「Assets」フォルダ内のCubeをドラッグ&ドロップする(図8)。

図8 「My Cube」プロパティに「Assets」フォルダ内の「Cube」をドラッグ&ドロップ

 最後にHierarchyからゲームオブジェクトを選択して、位置を上方に配置しておく(図9)。また、Hierarchy内のCubeは、もうプレハブ化してしまったので、不要なため削除しておく。「Cube」を選択してマウスの右クリックで表示されるメニューから「Delete」を選択すると削除できる。

図9 ゲームオブジェクトを上方に配置

 これで準備は整った。では次に舞台を作る。

舞台を作り、実行してSceneを保存

 Hierarchyの「Create」→「3D Object」→「Plane」と選択し、Planeを配置する。「Main Camera」の位置を図10のGame画面ように設定する。

図10 Game画面のように表示されるよう「Main Camera」の位置を調整した

 これを実行すると、動画1のようになる。「スペース」キーを押すとCubeが上から落ちてくる。

動画1 「スペース」キーでCubeが上から降ってくる

 少し「Cube」が大きいように見えるので、「Cube」の「Scale」の値は全て「1」にしておこう。Assetsフォルダ内の「Cube.prefab」を選択して、Inspectorから「Transform」→「Scale」→「X」「Y」「Z」に「1」と指定しておこう。

 最後に、今作成したシーンを保存しておく。Unityメニューの「File」」→「「Save Scene as」と選択して、「Cubeを動的に生成する」という名前で保存する。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。