第04回 バーチャルジョイスティック対応
この回はモバイル編第03回終了時点のプロジェクトを使用します。
今回はバーチャルジョイスティックを作成せずに、アセットストアにあるものを使用します。
図4.1: Unity Technologiesが提供しているSample Assets
Sample Assetsの中にあるCross Platform Inputをインポートしてください。
その他はインポートを行う必要ありません。Physics2DSettingsとTagManagerをインポートしてしまうとタグやレイヤー設定が変更され、ゲームが正しく動かなくなります。気をつけてください。
図4.2:
Mobile Single Stick Control Rigのプレハブをヒエラルキービューにドラッグ&ドロップしてください。
Mobile Single Stick Control Rigの子要素のJump Buttonを削除します。
これでバーチャルジョイスティック設置が出来ました。
次にバーチャルジョイスティックの入力を受け取ります。受け取り方はInputクラスではなくCrossPlatformInputクラスを使用します。
Player.cs
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
// Spaceshipコンポーネント
Spaceship spaceship;
IEnumerator Start ()
{
// Spaceshipコンポーネントを取得
spaceship = GetComponent<Spaceship> ();
while (true) {
// 弾をプレイヤーと同じ位置/角度で作成
spaceship.Shot (transform);
// ショット音を鳴らす
audio.Play ();
// shotDelay秒待つ
yield return new WaitForSeconds (spaceship.shotDelay);
}
}
void Update ()
{
// 右・左
float x = CrossPlatformInput.GetAxisRaw ("Horizontal");
// 上・下
float y = CrossPlatformInput.GetAxisRaw ("Vertical");
// 移動する向きを求める
Vector2 direction = new Vector2 (x, y).normalized;
// 移動の制限
Move (direction);
}
// 機体の移動
void Move (Vector2 direction)
{
// 画面左下のワールド座標をビューポートから取得
Vector2 min = Camera.main.ViewportToWorldPoint (new Vector2 (0, 0));
// 画面右上のワールド座標をビューポートから取得
Vector2 max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1));
// プレイヤーの座標を取得
Vector2 pos = transform.position;
// 移動量を加える
pos += direction * spaceship.speed * Time.deltaTime;
// プレイヤーの位置が画面内に収まるように制限をかける
pos.x = Mathf.Clamp (pos.x, min.x, max.x);
pos.y = Mathf.Clamp (pos.y, min.y, max.y);
// 制限をかけた値をプレイヤーの位置とする
transform.position = pos;
}
// ぶつかった瞬間に呼び出される
void OnTriggerEnter2D (Collider2D c)
{
// レイヤー名を取得
string layerName = LayerMask.LayerToName (c.gameObject.layer);
// レイヤー名がBullet (Enemy)の時は弾を削除
if (layerName == "Bullet (Enemy)") {
// 弾の削除
Destroy (c.gameObject);
}
// レイヤー名がBullet (Enemy)またはEnemyの場合は爆発
if (layerName == "Bullet (Enemy)" || layerName == "Enemy") {
// Managerコンポーネントをシーン内から探して取得し、GameOverメソッドを呼び出す
FindObjectOfType<Manager> ().GameOver ();
// 爆発する
spaceship.Explosion ();
// プレイヤーを削除
Destroy (gameObject);
}
}
}
ゲームを再生してみましょう。バーチャルジョイスティックでプレイヤーの移動が可能になっているはずです。
今回はここで終了です。今回はAssetStoreにあるアセットを使用しているのでプロジェクトのダウンロードはありません。
第01回 スプライトとスプライトアニメーションの作成
第02回 プレイヤーの移動
第03回 プレイヤーから弾を撃つ
第04回 敵を作成しよう
第05回 当たり判定とアニメーションイベントとレイヤー
第06回 背景を作る
第07回 Wave型の仕組み作り
第08回 音をつける
第09回 プレイヤーの移動制限と様々な修正
第10回 タイトルを付ける
第11回 エネミーのHP、弾の攻撃力、アニメーションの追加
第12回 Waveを5個にする、スコアの実装
第01回 複数の解像度に対応する(黒帯を追加する)
第02回 複数の解像度に対応する(引き伸ばす)
第03回 タッチパネル対応
第04回 バーチャルジョイスティック対応