次に、Unityメニューの「GameObject」→「Create Empty」と選択して空のゲームオブジェクトを作成すると、Hierarchy内にゲームオブジェクトが作成される。
このゲームオブジェクトを選択しInspector内の「Add Component」ボタンから「New Script」を選択する。「Name」に「AddCubeScript」と指定して「Language」に「C Sharp」を選択する。「Create and Add」ボタンをクリックすると、ゲームオブジェクトにスクリプトが追加される(図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); } }
まず、publicな「Transform」型の変数「myCube」を宣言する。「Transform」クラスは、オブジェクトの位置、回転、サイズを扱うクラスだ。Publicで宣言した変数は、ビルドをすると、Inspector内にプロパティとして表示される。
Update関数内で、「スペース」キーが押されたときに、動的に「Cube」を作成して落下させる処理を記述している。
「Instantiate」は引数で指定したゲームオブジェクトを作成する関数だ。書式は下記のようになる。
Instantiate({ゲームオブジェクト},{位置},{角度})
{ゲームオブジェクト}には「Transform」型の「myCube」を指定し、{位置}にはオブジェクトの「position」、{角度}にはオブジェクトの「rotation」を指定している。
コードはこれだけだ。書いた後は必ずメニューからビルドしておくことを忘れないようにしよう。
Unityの画面に戻って、ゲームオブジェクトのInspectorの「Script」を見ると、図6とは違って、「My Cube」というプロパティが追加されている(図7)。
なお、リスト1の1行目で「public Transform myCube」と宣言したために、Inspector内にプロパティとして表示されたのだ。これを「private Transform myCube;」と宣言するとプロパティとして表示されない。
JavaScriptのコードも記載しておく、コードの解説はC#と同じだ。JavaScriptで書きたい場合は、連載第5回のコラム「スクリプトエディタの切り替え」を参照されたい。
var myCube:Transform; function Update () { if(Input.GetKey(KeyCode.Space)) { Instantiate(myCube,transform.position,transform.rotation); } }
図7の「My Cube」の「None Transform」と記述されている箇所にProjectの「Assets」フォルダ内のCubeをドラッグ&ドロップする(図8)。
最後にHierarchyからゲームオブジェクトを選択して、位置を上方に配置しておく(図9)。また、Hierarchy内のCubeは、もうプレハブ化してしまったので、不要なため削除しておく。「Cube」を選択してマウスの右クリックで表示されるメニューから「Delete」を選択すると削除できる。
これで準備は整った。では次に舞台を作る。
Hierarchyの「Create」→「3D Object」→「Plane」と選択し、Planeを配置する。「Main Camera」の位置を図10のGame画面ように設定する。
これを実行すると、動画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.