前回までで画像の設定とアニメーションの作成方法を一通り見たので、そのようにして作成したGameObjectを、ユーザーからの入力に応じて動かしてみることにする。
今回はPCでの入力を主に見ていくが、スマートホンなどのケースも少しずつ触れていくことにする。
■PCでの入力受付
PCでの入力というと、メインとなるのは
キー入力
キー入力の場合、やり方が複数ある。順を追って見ていくことにする。
Input.GetKey, GetKeyDown , GetKeyUp
指定したキーが該当する状態にあるかどうかを確認するための関数。戻り値はBooleanか?名前 | 状態 |
---|---|
Input.GetKey | キーを押している間は常にtrue |
Input.GetKeyDown | キーが押されていない状態から押した際にtrue |
InputGetKeyUp | キーを押している状態から離した際にtrue |
これらのメソッドを用いて、キーの状態を取得することになる。 具体的に見てみよう。
クラス「InputManager.cs」を作成し、前回生成したキャラクターのGameObjectにアタッチする。 クラス内の関数「update」内に、キー入力を受け付けるための処理を記述していく。
void Update () {
if (Input.GetKey (KeyCode.RightArrow)) {
Debug.Log ("右矢印が押された");
}
}
右矢印キーが押されている間ずっと反応させたい場合、上記のような形になる。 この形で矢印キーによるキャラの移動を実装してみる。
float horizonalSpeed;
float horizonalMaxSpeed = 6.0f;
int horizonalDir;
Rigidbody2D rb2d;
const int DIR_RIGHT = 1;
const int DIR_LEFT = -1;
const int DIR_NONE = 0;
const int DIR_TOP = 1;
const int DIR_BOTTOM = -1;
const string MOVE_TYPE_HORIZONAL = "horizonal";
const string MOVE_TYPE_VERTICAL = "vartical";
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown (KeyCode.RightArrow)) {
horizonalDir = DIR_RIGHT;
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
horizonalDir = DIR_LEFT;
}
//キーを離した際の処理。
if (Input.GetKeyUp (KeyCode.RightArrow)) {
if (!Input.GetKey (KeyCode.LeftArrow)) {
stop(MOVE_TYPE_HORIZONAL);
}
}
else if (Input.GetKeyUp (KeyCode.LeftArrow)) {
if (!Input.GetKey (KeyCode.RightArrow)) {
stop(MOVE_TYPE_HORIZONAL);
}
}
move (horizonalDir, jumpFlg);
}
///
/// 移動停止処理
///
/// Type.
void stop(string type)
{
if (type == MOVE_TYPE_HORIZONAL) {
horizonalDir = DIR_NONE;
horizonalSpeed = 0.0f;
}
}
///
/// キャラを移動させる関数。
///
/// Dir.
void move (int dir, bool jumpFlg)
{
horizonalSpeed += accelSpeed * dir;
if (horizonalSpeed > horizonalMaxSpeed) {
horizonalSpeed = horizonalMaxSpeed;
} else if (horizonalSpeed < -horizonalMaxSpeed) {
horizonalSpeed = -horizonalMaxSpeed;
}
rb2d.velocity = new Vector2 (horizonalSpeed, 0);
}
これでキャラを矢印キーで左右に動かすことが可能になる。
Unityちゃんのサンプル内では、ちょっと違った処理を行っている。次回はその処理を解析する。