2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(Unity)Joystick PackのFloating Joystickを使う場合の注意

Posted at

0.0 はじめに

UnityのAsset(アセットストア)のJoystick Packを使うと3D、2D問わずゲームにバーチャルスティックを簡単に実装できます。
バーチャルスティックの種類もFixed(スティックは常に表示され、位置が固定されている)、Floating(スティックはタップされるまで非表示だが、タップされたらその場にスティックが表示される)とDynamic(スティックはタップされるまで非表示だが、タップされたらその場にスティックが表示され、ドラッグすると追従する)という3種類のモードがあります。
ただCanvasのRender Modeの設定がScreen Space - Camera(RenderMode==ScreenSpaceCamera)の状態で、Floatingモードをつかうと1回目だけコントローラーが表示されない、動作が変な感じになります。

対策を見つけるのにかなり時間がかかったので忘れないうちに記事にしておきます。
もちろん、CanvasのRender Modeの設定をScreen Space - Overlayを変えればこの問題は起きなくなります。

1.0 スクリプトの変更

ScriptsフォルダのBaseフォルダにあるJoystickを変更します。

image.png

ScreenPointToAnchoredPosition関数(138行目あたり?)の頭 、Vector2 localPoint = Vector2.zero;の前、(もしくはすぐ後)に下記の記述を挿入する

C# Test.cs
if (cam == null && canvas.renderMode == RenderMode.ScreenSpaceCamera)
    cam = canvas.worldCamera;

この記述がないとcam変数にcanvas.worldCameraが設定されないので、canvasの大きさが考慮されずJoystickの位置が意図しない場所に表示されてしまいます。
ちなみにこの関数を呼んでいるFloatingJoystickクラス(Joystickクラスの継承先)ではScreenPointToAnchoredPosition関数の後にOnPointerDown関数を呼んでいますが、こちらの関数にはこの記述が含まれている、、、、なぜだろう?

2.0 その他、このアセットについて

FloatingモードとDynamicモードでは、デフォルトだとRect Transformが画面左下側に偏っているので画面左下側のみでしか反応しません。画面全体でJoystickつかうのであれば幅Widthと高さHightを画面サイズに変更しましょう(このときAnchorsやAnchor Presetsは変更せず左下基準のままとする)。
このアセットはUIなのでCanvasに入れる必要があります。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?