ゲームを作っているとキャラクターや物をタッチして操作したくなるかと思います。その方法をご紹介。
実装方法
まず初めに実装方法として2パターンあります。
- Rayを飛ばしてオブジェクトに当たったかを判定する方法
- Event Triggerでタッチイベントを取得する方法
Rayは古いやり方で実装方法もまどろっこしいので、新しくて簡単に実装できるEvent Triggerでの方法をご紹介します。
大まかな手順
大まかな実装手順の流れは以下となります。
- タッチしたときの動作が書かれたスクリプトの作成
- タッチさせたいオブジェクトに上記のスクリプトをアタッチ
- タッチさせたいオブジェクトにEvent Triggerコンポーネントを追加
- タッチさせたいオブジェクトにコライダー追加
- ヒエラルキーウィンドウにEvent System追加
- メインカメラにRaycasterコンポーネントを追加
スポンサードサーチ
詳細な実装手順
では詳細な実装手順を見ていきたいと思います。
スクリプトの準備
今回は「nekoCtrl.cs」というスクリプトを作りました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class nekoCtrl : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } public void onClickAct() { Debug.Log("タッチされたにゃー"); } }
タッチされたときに呼ばれる関数をPublicで用意しておきます。
上記の例では「onClickAct()」関数になります。
オブジェクトの準備
タップさせたいオブジェクトに先ほど作ったスクリプトをアタッチします。
続いて、同じくタップさせたいオブジェクトに「Event Trigger」コンポーネントを追加します。 「コンポーネントの追加 → イベント → Event Trigger」で追加できます。
追加したEvent Triggerコンポーネントの「新しいイベントタブを追加」ボタンを押してイベントを追加します。今回は単純なタッチを実装するので「PointerClick」を選びました。
空のリストが追加されるので「+」ボタンを押しリストのアイテムを追加します。
追加されたリストアイテムのオブジェクトには、タッチしたときに呼び出す関数が書かれたスクリプトがアタッチされているオブジェクトを割り当てます。
タッチしたときに呼び出すスクリプトは自分自身にアタッチされているので、このオブジェクトの部分には自分自身を割り当てます。
「No Function」となっている部分はタッチしたときに呼び出す関数を割り当てます。
今回の例では「nekoCtrl → onClickAct()」を選びます。
最後にコライダーコンポーネントを追加すればオブジェクトの準備は完了です。コライダーをオブジェクトにつけることでオブジェクトに当たり判定が生まれ、タッチの判定が発生するようになります。
「コンポーネントを追加 → 2D物理(3Dなら物理) → お好みのコライダー」で追加します。
画像では2Dポリゴンコライダーとなっていますが、2Dサークルコライダーあたりが分かりやすくていいのではないでしょうか。
Event System追加
ヒエラルキーウィンドウにて「UI→ イベントシステム」でEvent Systemを追加します。Event Systemは追加するだけでOKです。
なお、UIを既に何かしら追加していれば自動的にEvent Systemも追加されるため、その場合はこの手順は不要です。
メインカメラ設定
最後に、メインカメラに「Physics 2D Raycaster」を追加すればすべて完了です。3Dの場合は「Physics Raycaster」です。
メインカメラのインスペクターから「コンポーネントの追加 → イベント → Physics 2D Raycaster」で追加できます。
ちなみにこれも追加するのみで特に設定は不要です。
スポンサードサーチ
動作確認
これで実装は完了となります。実行して動作を確認してみましょう。
長々と書きましたが、やってることは簡単でほとんどスクリプトも書かずに実装できます。
ありがたいことですね!
なおこの方法ではオブジェクトが重なっていると1つのオブジェクト分のタッチしか反応しません。オブジェクトが複数重なっているときにすべてのタッチを取得する方法はこちらで紹介しています。
【Unity】重なった複数オブジェクトを同時にタッチする方法【2D】