今まで2Dのゲームばっかり作っていたので、3Dに挑戦しようとしているところで、ギミックをクリアすると箱が開くという機能が実装できたということは、これを増やせば脱出ゲームができてしまうわけだ。 #ゲ制デー pic.twitter.com/DE8KvDbnaO
— よしゆき (@yoshiyuki_ss) August 11, 2023
Unityで3Dの脱出ゲームを作るべく、3Dのオブジェクトをクリックしてボタンを模擬するスキルを手に入れました。
再び調べながら作るのを防ぐため、備忘録的にまとめます。
Unityのバージョン:2022.3.4f1
クリック時のアニメーションについては関連記事「 【Unity】クリックしたらアニメーションを動かす方法を解説 」をご覧ください。
【Unity】オブジェクトのクリック判定の実装方法【3D編】
次の4つの要素があれば、Unityでオブジェクトのクリックを判定することができます。
- カメラに「Physics Raycaster」をアタッチする。
- EventSystemを追加する。
- クリックするオブジェクトにColliderをアタッチする。
- クリックするオブジェクトにScriptをアタッチする。
- クリックするオブジェクトにEvent Triggerをアタッチする。
それぞれ解説していきます。
カメラに「Physics Raycaster」をアタッチする
Main CameraオブジェクトのInspectorで「Add Componet」ボタンをクリックし、Physics Raycasterを追加しましょう。
追加するだけでよく、パラメーターは初期値のままで良いです。
EventSystemを追加する
Componentメニューから、Event Systemを選択し、シーンの直下にEvent Systemを追加します。
こちらもパラメーターは変更不要です。
クリックするオブジェクトにColliderをアタッチする
本記事のサンプルではカプセル型のオブジェクトを追加し、カプセルオブジェクトをクリックするサンプルとします。
Colliderのオブジェクトの形状に合わせたものを使用すれば良いです。
今回はUnityがカプセルオブジェクトを追加したとき、デフォルトですでにColliderはアタッチされているのでそのまま使用します。パラメーターの変更も不要です。
クリックするオブジェクトにScriptをアタッチする
最低限のスクリプトとして、下記を準備します。単純にOnClickメソッドを作り、このメソッドにクリック時の処理を実装します。
using UnityEngine; public class BaseButton : MonoBehaviour { public void OnClick() { Debug.Log("OnClick"); } }
本記事の先頭に載せた動画ではクリックしたらオブジェクトを移動させるアニメーションを動かしつつ、テキストを1〜9まで変更するような処理を実装していました。
作成したスクリプトをクリックしたいオブジェクトにアタッチします。
※上記のスクリプトをアタッチすると、NumberとBoxはInspectorには表示されません。無視してください。
クリックするオブジェクトにEvent Triggerをアタッチする
クリックしたいオブジェクトの「Add Comoponent」で「Event Trigger」を追加します。その後、「Add New Event Type」ボタンをクリックし、「Pointer Click」を選択します。
そして、Pointer Clickのところに先ほどアタッチしたスクリプトを指定し、メソッドはOnClickを選択します。
これでオブジェクトをクリックしたら、OnClickが動くようになります!
まとめ
Unityの3Dオブジェクトのクリック判定についてまとめました。
UIのボタンだとメソッドを指定するだけで良いのですが、オブジェクトをクリックするには色々と手続きが必要で面倒ですね。。。
何はともあれ、これでオブジェクトをクリックする方法がわかったので、脱出ゲームのギミックでも考えます。
それでは。