Screen Space-Camera時のJoystick Packの設定

Unityにてシューティンゲームを作成している際、Joystick PackのFloating Joystickを利用した。

 

assetstore.unity.com

 

今回、自分が作っているこのゲームではCanvasのRender ModeをScreen Space-Cameraと設定していた。

このScreen Space-Cameraだと、Floating Joystickの挙動が少し変だった。

 

具体的には下記のようになってしまった。

 

f:id:exwks:20200510225058p:plain

赤星マーク部分をタッチしているのにFloating Joystickは全然違うところに出現している

 

画面タッチした位置とFlaoting Joystickの出現位置がずれてしまっている。

しかもこれは一番最初のタッチだけで発生し、それ以降はタッチとlaoting Joystickの出現位置は同位置となり、正常となる。

 

この現象を解消するために、スクリプトを書き換えた。

具体的には、Joystick.jsのStart()部分とOnDrag(PointerEventData eventData)部分である。

 

おそらく、原因はFloatingJoystickのbackground.anchoredPositionが決まる前にcam = canvas.worldCameraの設定が効いていない事かと思う。

なので、background.anchoredPositionが決定される前にcanvas.worldCameraの設定を下記のように行った。

 

f:id:exwks:20200510230845p:plain

上図のようにStart()に「cam = canvas.worldCamera」を追加

 

加えて、

 

f:id:exwks:20200510230740p:plain

上図のようにOnDrag(PointerEventData eventData)の「cam = null」とif文をコメントアウト

 

こうする事で、タッチイベントが発生する前にcanvas.worldCameraの設定ができ、そのあとの余計な処理(OnDrag(PointerEventData eventData)内のコメントアウトしたところ)を省くことができる。

 

以上の書き換えを行ったところ、

 

f:id:exwks:20200510233708p:plain

タッチ位置とFloating Joystickの位置が同位置にある

 

最初のタッチ位置とFloating Joysickの位置が同位置にあるようになった。