
マイケル
どうもみなさんこんにちは!
マイケルです!
マイケルです!

エレキベア
クマ〜〜〜〜〜

マイケル
とりあえずゴーゴーゴロヤンの開発が終わったので、
久しぶりにゆるモンの作成を進めてみようと思います!
久しぶりにゆるモンの作成を進めてみようと思います!
↓前回の作成日記はこちら
【Unity】ゆるモン作成日記② 〜追加キャラ・エフェクト・効果音作成まで〜

エレキベア
ほんと久しぶりクマね〜〜〜
もう作るのやめてしまったのかと思ったクマ
もう作るのやめてしまったのかと思ったクマ

マイケル
時間がかかりそうだし、仕様もきっちりと決まってないから
他の作りながら少しずつ進めていこうと思ってるよ!
他の作りながら少しずつ進めていこうと思ってるよ!

マイケル
今回はこんな感じで修正してみました!

エレキベア
お、スティックが増えてるクマ

マイケル
よく気づいたね!
これまでキー操作しかできなかったけど、
スマホで遊ぶのを想定してジョイスティックを追加で実装したんだ!
これまでキー操作しかできなかったけど、
スマホで遊ぶのを想定してジョイスティックを追加で実装したんだ!

マイケル
それと合わせて画面ドラッグでカメラ移動する処理も追加したよ

エレキベア
今回はこのスティックの実装方法について話すクマね

マイケル
そういうことだ!
早速進めていこう!
早速進めていこう!
参考にした書籍について

マイケル
まず実装にあたって参考にした参考書は以下になります!

マイケル
こちらの「3Dアクション」の章を参考にさせてもらいました!
書籍ではタップした箇所にスティックが現れるようにしていますが、
今回はスティック位置は固定で移動するようカスタマイズして組み込んだよ!
書籍ではタップした箇所にスティックが現れるようにしていますが、
今回はスティック位置は固定で移動するようカスタマイズして組み込んだよ!

マイケル
実践的なサンプルがたくさん載っているので、
初心者向けの参考書を読破した次のステップとしておすすめの参考書です!
初心者向けの参考書を読破した次のステップとしておすすめの参考書です!

エレキベア
この本はクマも持ってるクマ〜〜〜〜
ジョイスティックの実装

マイケル
それでは早速実装していこう!
スティックオブジェクトの作成

マイケル
まずは、スティックの固定部分と動かす部分の画像を用意します!

マイケル
画像ができたら、UnityでCanvasに追加しましょう!
こちらのオブジェクトを使用して移動処理を実装していきます!
こちらのオブジェクトを使用して移動処理を実装していきます!

エレキベア
円かいてポイクマね
移動処理の実装

マイケル
それでは移動処理をスクリプトで実装します!
実装したソースは以下になります!
実装したソースは以下になります!

マイケル
Unity.Inputクラスの「UnityEngine.Touch」を使用して
タップを検出するようにしています!
タップを検出するようにしています!

マイケル
「UnityEngine.Touch」では、タップされるごとに「fingerID」が一意に割り当てられます。
割り当てられたIDを使用してタップが継続しているかどうかを判定するようにしています!
割り当てられたIDを使用してタップが継続しているかどうかを判定するようにしています!

エレキベア
スマホ用に複数タップに対応したクマね

マイケル
まず上記「PushDownStick()」メソッドでスティックのタップを検知し、
「GetTouch()」メソッドでタップされたTouch情報を取得しています!
「GetTouch()」メソッドでタップされたTouch情報を取得しています!

マイケル
「GetTouch()」メソッドでは、「TouchPhase.Began」で開始された情報を返却しており、Touch情報がない場合にはfingerIDを「-1」で指定しています。
一方Unityエディターではマウスクリックのみなので、fingerIDは「0」で固定しています。
一方Unityエディターではマウスクリックのみなので、fingerIDは「0」で固定しています。

マイケル
あとは取得したTouch情報を使用して、移動された量を計算したり、
最大半径を超えたら丸めたりなど、煮るなり焼くなりしましょう!
最大半径を超えたら丸めたりなど、煮るなり焼くなりしましょう!

マイケル
移動量を受け取ったら、カメラの向きを考慮して移動先に変換してあげます!
(渡された移動先に移動する処理についてはここでは省略します)
(渡された移動先に移動する処理についてはここでは省略します)

エレキベア
これでスティックで動くようになったクマね〜〜〜
カメラ移動処理の実装

マイケル
Touchオブジェクトを勉強したついでに、
カメラの移動処理も追加しました!
カメラの移動処理も追加しました!

マイケル
ボタン以外の箇所をドラッグした時に、カメラも移動するようにしています。

マイケル
スティック移動と同様に、touch情報を使用してドラッグ判定をしています。
「EventSystem.current.IsPointerOverGameObject」を使用すればuGUIの重なりを判定できるので、ボタンの上のタッチは検出しないようにできます!
「EventSystem.current.IsPointerOverGameObject」を使用すればuGUIの重なりを判定できるので、ボタンの上のタッチは検出しないようにできます!
おわりに

マイケル
というわけで、Touchオブジェクトを使用した
ジョイスティックとカメラ移動の実装でした!
ジョイスティックとカメラ移動の実装でした!

エレキベア
Touchオブジェクトはなかなか汎用性が高そうクマね〜〜〜

マイケル
タップ情報をコントロールできるから、
いろんなゲームに使えると思うよ!
いろんなゲームに使えると思うよ!

マイケル
今後も少しずつ、ゆるモン進めていこうと思うので
気長に見守っていてください・・・。
気長に見守っていてください・・・。

エレキベア
完成はいつになるやらクマ・・・・。

マイケル
それでは今日はこの辺で!
アデュー!!
アデュー!!

エレキベア
クマ〜〜〜〜〜〜〜〜
【Unity】ゆるモン作成日記③ 〜ジョイスティックとカメラ移動の実装〜 〜完〜