Unity3D
NGUI

【Unity】【NGUI】NGUIにVirtual Joystick(NGUI用)を追加してみた

More than 5 years have passed since last update.

NGUIではdepthなどいろいろ問題があるようなので

このままStandard Asset(mobile)のSingle Joystickが使えません。

なにか方法はないかと探したところNGUIでも

Packgeを追加だけで仮想Joysitckで動かす方を見つかったので紹介します。

これを動かすためにソース読んだり資料がまったくなかったので

時間食ってしまった;;


開発環境

NGUI 2.6.3

NGUI Joystick.unitypackage(添付ファイル)

Unity4


手順


  1. NGUI インポート

  2. Asset -> Import Pacakge -> Custom PackageからNGUI Joystick.unitypackageをインポート

  3. インポートするとProject ViewからNGUIフォルダーの中にRobotsNGUIフォルダーがあることを確認
    1.png

  4. RobotsNGUI -> joysticktest ->NGUIjoystickでシーンをロードしてみる
    2.png

  5. これで実行すると仮想Joystickが動きます。

  6. 動きが確認できればHirerarchy ViewからUI Root (2D)の中でJoysitc ゲームオブジェクトだけ取ります。

  7. Joysitcームオブジェクトをマウス右側クリックでコピーして追加したシーンにペスト(Tag名はJoystickで追加)

  8. 動かすスクリプトを作る前にこの方向を決め手はなにか説明しますね。

3.png


  1. 画像にUIJoystic(Script)と書いてあるPositionが方向をあらわします。値は-1から1までです。
    一番左に向くと-1右は1になります。上下も同じ!
    10.スクリプトを追加します。


Player.cs

    UIJoystick joystick;

void Start() {
this.joystick = GameObject.FindGameObjectWithTag("Joystick").GetComponent<UIJoystick>();
}

void Update() {

if (this.joystick.position.y > 0)
{
transform.position += new Vector3(0, _speed * Time.deltaTime, 0);
}
else if (this.joystick.position.y < 0)
{
transform.position -= new Vector3(0, _speed * Time.deltaTime, 0);
}
if (this.joystick.position.x > 0)
{
transform.position += new Vector3(_speed * Time.deltaTime, 0, 0);
}
else if (this.joystick.position.x < 0)
{
transform.position -= new Vector3(_speed * Time.deltaTime, 0, 0);
}
}


これで完成ですね。Tag名がJoystickのゲームオブジェクトからUIJoysitckを探し、

その中の方向(joystic.position)で動きを定められます。

要注意は値が-1から1の間ということです。


参考

http://www.tasharen.com/forum/index.php?topic=55.0

http://sekainonaka.tistory.com/180

http://blueasa.tistory.com/895