[Unity初心者日記] プロジェクトをつくってみる で作成したプロジェクトの中心にあるキューブ。
とりあえずこいつを動かしてみます。
操作するスクリプトを用意する
まずそのあたりの操作をするためのスクリプトを作ります。
ProjectのAssetsで右クリックして、「Create→Folder」でScenesフォルダとScriptsフォルダを作成します。
そのままでもいいんですが、基本的に整理していきたいので。
スクリプトはScriptsの下に置いていきます。
次にScriptsフォルダで右クリックして「Create→C# Script」を指定し、CubeControllerを作ります。
これを上に浮いてるCubeに追加します。
HierarchyでCubeを選択すると、右のInspectorにその情報が出るので、そこにCubeControllerをドラッグ&ドロップします。
すると、CubeControllerが追加されます。
これで、CubeControllerがこのCubeのコンポーネントとして動作するようになります。
追加する方法は、今回のようにInspectorにドラッグ&ドロップする方法、Hierarchyのオブジェクトにドラッグ&ドロップする方法、Inspectorの「Add Compornent」で選択する方法があります。これは都度やりやすい方法でやります。
さて中身。
キーボードで動かす
キーの上下左右で移動、スペースキーとバックスペースで接近/離れるという操作をつくってみます。
CubeControllerスクリプトをダブルクリックしてエディタを開くと、初期の状態として次のようになっています。
using UnityEngine; using System.Collections; public class CubeController : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
ここに処理を書き加えていくことで、プログラムを操作していきます。
初期ではStartとUpdateの2つのメソッドが用意されています。このメソッドの役割は次の通り。
Start() | 実行されるときに一度だけ呼び出される |
Update | 毎フレーム呼び出される |
一度だけ処理すればいいものはStartに、毎フレーム処理したいことはUpdateに書きます。
今回は、「キーボードの状態を拾ってCubeを動かす」としたいので、Updateに次のコードを書いてみます。
if (Input.GetKey(KeyCode.UpArrow)) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y + 0.1f, gameObject.transform.position.z); } if ( Input.GetKey(KeyCode.DownArrow)) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y - 0.1f, gameObject.transform.position.z); } if ( Input.GetKey(KeyCode.LeftArrow)) { gameObject.transform.position = new Vector3(gameObject.transform.position.x - 0.1f, gameObject.transform.position.y, gameObject.transform.position.z); } if ( Input.GetKey(KeyCode.RightArrow)) { gameObject.transform.position = new Vector3(gameObject.transform.position.x + 0.1f, gameObject.transform.position.y, gameObject.transform.position.z); } if ( Input.GetKey(KeyCode.Space) ) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z + 0.1f); } if (Input.GetKey(KeyCode.Backspace)) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z - 0.1f); }
Input.GetKeyで指定されたキーが押されているか、ということを判定し、押されていたらgameObjectのtransform.positionを変更しています。
このgameObjectは、スクリプトがつけられているオブジェクトのものとなっていて(ここではCube)、そのtransformを変更することで、オブジェクトの位置が変更できます。
インスタンスの構造としては次のようになっていて、
GameObject - Compornent (CubeController) - Comportnet - ...
というようにCubeControllerスクリプトはGameObjectが抱えているCompornetの一つなっているので、Compornent側からみて、親になるオブジェクトを参照している格好になります。
実行した結果。
上下左右キーとスペースキー、バックスペースキーで動く動く。