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 > Impor Package > CrossPlatformInput
をクリックします。すると小さいウィンドウが現れるのでImportをクリック。
###prefabの追加
無事インプットが済んだらAssets/StandardAssets/CrossPlatformInput/Prefabs
に入っているMobileSingleStickControl
をHierarchyに追加します。
追加後のゲーム画面はこんな感じ。
青色のがジョイスティックで、白いのがジャンプボタンです。今回ジャンプボタンはいらないので消してしまいましょう。
###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
をクリックして追加します。
追加できたら早速実行してみましょう。
操作してみるとジョイスティックが画面の左下に移動してなんだか気持ち悪いですね。このままだと左と下には移動できないので、対策が必要です。
###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にしてやります。
実機で動かしてみるとそんなの大きくなかったです。
以上を適用すると画面はこのようになります。
お疲れ様でした!
##参考文献