目次
オリジナルのボクセルを使って脱出ゲーム制作に挑戦!
用意するもの
- Unity
- VSCode,VisualStudioなど
- 3Dモデル
この記事ではUnity6を使用しています。
ズーム後のイベントの仕組みを作成する
前回はドア(オブジェクト)をクリックしたら視点をズームさせる機能を実装しました。
今回はオブジェクトをクリックしズームした後、さらにクリックした際になんらかのイベントを発生させるための仕組みを作成します。
木箱をクリックしたらズームし、さらにクリックしたらフタが開くアニメーションを再生させます。ズームするスクリプトとフタが開く仕組みはすでにできているのでそちらを使用します。
アニメーションの作り方はこの記事をチェック!
ズームする機能の作り方は前回の記事をチェック
木箱にズームした後にフタが開くようにする
現在、ズームをしていなくても、木箱をクリックするとフタが開くようになっている

ズーム機能の実装
まずは前回作ったスクリプトを使用し、木箱にズームをする機能を実装します
SubCameraを作成
SubCameraのオブジェクトを作成し、位置を調整
PhysicsRaycasterを追加します

木箱のオブジェクトにZoomObj.csを追加し、SubCameraをドラッグ
EventTriggerを1つ追加し、ZoomObj.csをドラッグし、OnClickを選択

これで木箱をクリックしたらSubCameraに切り替わるようになった
ちゃんとズームするか確認
ズームするようになったが、同時にフタのアニメーションが再生してしまう
これじゃ自動で開いたみたいだ
Layer機能で当たり判定を分離し、個別に操作する
親オブジェクトを作成し、Layer機能を使用して親オブジェクトと木箱の当たり判定を個別に操作します
親オブジェクトを作成する
Hierarchyに空のGameobjectを作成します

名前をわかりやすくし、木箱や木箱のフタ、木箱用に作ったSubCameraを子オブジェクトとして並べます

始めに作ったズーム機能を削除
子オブジェクトの木箱のズーム機能は不要なので削除します
EventTriggerのZoomObj.OnClickの項目を選択し「-」を押し削除します(アニメーションするための項目は残す)
ZoomObj.csスクリプトをRemoveComponentし、削除します

親オブジェクトの設定
親オブジェクトにズームする機能を再度設定します
当たり判定を複製する
前に作成したWoodenBoxのBox Colliderがそのまま使えるので、複製します
Copy Componentを選択

親オブジェクトのInspectorで右クリックをし、Component As Newを選択。
Box Colliderを追加します


Box Colliderが数値ごとコピーされた!
ズーム機能を設定
ZoomObj.csとEventTriggerを追加しズーム機能を再度設定します

EventTriggerにZoomObjをドラッグして設定

Layerの追加
2つ重なっている当たり判定を正しく判別するために「Layer」を活用します
新規Layerを作成
InspectorのLayer「Add Layer…」を選択

新しく「CameraZoomObj」を作成

親オブジェクトのLayerタグを変更
親オブジェクトを選択し、LayerをCameraZoomObjに変更

子オブジェクトにも変更を反映させるか聞かれるので「No, this object only」を選択

カメラのMask設定を変更
MainCameraを選択し、PhysicsRaycasterのEventMaskを変更
Defaultのチェックを外します

SubCameraを選択し、PhysicsRaycasterのEventMaskを変更
こちらはCameraZoomObjのチェックを外します

これでレイヤーマスクが正しく設定できた
MainCameraはDefaultのオブジェクトを無視、SubCameraはCameraZoomObjのオブジェクトを無視するようになっている
完成
うまくできた!
まとめ
Layerマスクを使用することで重なったコライダーを個別に判定することができて便利!
とりあえず今回はここまで