Help us understand the problem. What is going on with this article?

Unity5版Standard Assetsを使って仮想ジョイスティックを実装

More than 3 years have passed since last update.

Unity5をインストールすると最初から入っているStandard AssetsのCrossPlatformInputのパッケージを使用してジョイスティックを実装しようとしてハマったのでメモ。過去のバージョンのAssetに関する情報は割と出回っているが、現段階で情報を得るのにも骨が折れました。

今回は公式の2Dシューティングのチュートリアルプロジェクトをサンプルに実装方法を紹介していきます。

Unity4.6向けの情報をお探しの方はこのへんを参考にしてください。

環境

Unityのバージョン:5.0.1f1
Standard Assetsのバージョン:1.0 (Mar 25, 2015)
https://www.assetstore.unity3d.com/jp/#!/content/32351
使用サンプルコード:Unity公式の2Dシューティングチュートリアル

実装

パッケージのインポート

Assets_と_Menubar.jpg

メニューバーのAssets > Impor Package > CrossPlatformInputをクリックします。すると小さいウィンドウが現れるのでImportをクリック。

prefabの追加

無事インプットが済んだらAssets/StandardAssets/CrossPlatformInput/Prefabsに入っているMobileSingleStickControlをHierarchyに追加します。

追加後のゲーム画面はこんな感じ。

Stage_unity_-_12_ShootingGame_-_Android__Personal_.jpg

青色のがジョイスティックで、白いのがジャンプボタンです。今回ジャンプボタンはいらないので消してしまいましょう。

delete.jpg

Player.csをいじる

ジョイスティックの動きを自機の移動に反映するためにPlayer.csを以下のように変更します。変更はusingディレクティブとUpdateメソッドに関する2点です。

using UnityStandardAssets.CrossPlatformInput;
//Joystick.csとPlayer.csの仲介をするCrossPlatformInputManagerを使うために名前空間を指定

public class Player : MonoBehaviour
{

////////////中略////////////

    void Update ()
    {
        // 右・左
        float x = CrossPlatformInputManager.GetAxisRaw("Horizontal");

        // 上・下
        float y = CrossPlatformInputManager.GetAxisRaw("Vertical");

        // 移動する向きを求める
        Vector2 direction = new Vector2 (x, y).normalized;

        // 移動の制限
        Move (direction);

    }

    ////////////中略////////////
}   

この段階でプレイしてみましょう。
……ジョイスティックを動かしても何も起きませんね。
もう少し作業が必要になります。

EventSystemの追加

このままではスティックが動いてくれないので、EventSystemというGame Objectを追加します。メニューバーのGameObject > UI > Event Systemをクリックして追加します。

event.jpg

追加できたら早速実行してみましょう。

game2.jpg

操作してみるとジョイスティックが画面の左下に移動してなんだか気持ち悪いですね。このままだと左と下には移動できないので、対策が必要です。

Joystick.csをいじる

ProjectからAssets/StandardAssets/CrossPlatformInput/Scripts/Joystick.csを開いてください。

28行目のOnEnable()Start()に変えてください。

そうすることで動きが改善されたはずです。

操作性を向上する

これだけでも一応遊べるのですが、ジョイスティックの移動の程度が動きに反映されないので少し気持ち悪く感じられると思います。ですので、ジョイスティックが小さく動けば自機を少し動かし、ジョイスティックが大きく動けば自機を大きく動かすように変更したいと思います。

先ほどいじったPlayer.csのUpdateメソッドを少し変更するだけです。具体的にはベクトルの正規化をしないようにしてやります。

    void Update ()
    {
        // 右・左
        float x = CrossPlatformInputManager.GetAxisRaw("Horizontal");

        // 上・下
        float y = CrossPlatformInputManager.GetAxisRaw("Vertical");

        // 移動する向きを求める
        //Vector2 direction = new Vector2 (x, y).normalized;
        Vector2 direction = new Vector2 (x, y);

        // 移動の制限
        Move (direction);

    }

こうすることで操作性を向上することができました。

ジョイスティックがデカくて邪魔ななので、ついでにコイツのサイズを小さくしましょう。まずHierarchyよりMobileSingleStickControl > MobileJoystickを選択します。
インスペクタからScaleをx,y,zすべて0.5にしてやります。

実機で動かしてみるとそんなの大きくなかったです。

以上を適用すると画面はこのようになります。

final.jpg

お疲れ様でした!

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away