[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側からみて、親になるオブジェクトを参照している格好になります。
実行した結果。
上下左右キーとスペースキー、バックスペースキーで動く動く。