読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

タッチした所が始点になるバーチャルジョイスティック【Unity】【NGUI】


このエントリーをはてなブックマークに追加

タッチした所が始点になるジョイスティック

バーチャルジョイスティック自体はUnityのstandard assetsにあるのですが、あれだとタッチした所を始点にするのがなかなか難儀だったので、作ってみました。あとNGUI用ですのであしからず。

「タッチした所が始点になる」ってなんじゃい。ってなるかもしれないので、具体的には以下のようなものです。

f:id:kan_kikuchi:20141108170205g:plain

タッチした所に現れて、指を離すと消える。と言った方が分かり易いかもしれません。

JoyStick.cs

さっそくコードですが、以下のようになります。

コードの最初の方にAttach〜みたいな変数がありますが、これはUnity上でドラック&ドロップで関連付けるものです。

使い方

以下の用にNGUIのUI Rootに配置し(JoyStickPanelは無くてもOK)Joystickに先ほどのスクリプトを付けます。

f:id:kan_kikuchi:20141108172805p:plain

そして、JoyStickBackSpriteにジョイスティックの背景(台座?)のUISpriteを設定、JoystickSpriteにジョイスティックのUISpriteを設定し、JoyStick.csのAttach〜にそれぞれドラック&ドロップします。また同時にUI Root以下にあるGUI用カメラもドラック&ドロップします。

どれだけジョイスティックを動かしたかは以下のようにして受け取ります。

public JoyStick AtatchJoyStick;

private void Move(){
		Vector3 velocityNow = Vector3.zero;

		//ジョイスティックによる操作
		velocityNow.x = AtatchJoyStick.Position.x;
		velocityNow.z = AtatchJoyStick.Position.y;
}

AtatchJoyStick.Positionのx及びyが-1〜1の値になるのでこれを使ってキャラクターを任意の方向に動かせます。

コード説明

まずAwakeでジョイスティックを動かせる半径を設定します。

_maxRadius = AttachJoyStickBackSprite.GetComponent<UISprite>().height * MAX_RADIUS_RATE;

ジョイスティックの背景 × MAX_RADIUS_RATE だけ動かせるようにしているので、MAX_RADIUS_RATEの値を変えれば任意の制限を付けられます。

DisplayConfirmation では
タッチされた時に、タッチされた場所にジョイスティックを表示し、
指が離れた時に、ジョイスティックを非表示にしています。

Moveでは、ジョイスティックが表示されている、つまりタッチされているときだけジョイスティック部分を動かしています。
ただし、最初に設定された半径内に収まる用に移動場所を制限し、参照される_positionの値を使い易いように-1〜1の間に正規化しています。