ゲーム制作   Unity ソフトウエア 

Unity ソフトウエアでゲーム制作#1モグラたたき編(7.クリックイベント)

キャッチ画像モグラたたきクリックイベント

本投稿は2024年9月時点の内容になります。アップデートにより変更となる場合があります。また環境によって違いがあると思いますのであくまで参考として、ご了承ください。

様々な書籍、ブログや動画を参考にさせていただきました。多すぎて一つ一つは紹介できませんが感謝です。

初心者の自分がUnity ソフトウエアでゲームを作ってみました。とりあえずシンプルなものということでモグラたたきに挑戦です。ゲーム作ってみるかという感じになったときに、いいタイミングで某ゲームのイベントシナリオ内ミニゲームにモグラたたきが実装されていたのでUIとかエフェクトとか、諸々の仕様をぱくって参考にして作ってみましたよ。様々なHowToの中の選択肢のひとつとして、同じ初心者さんの参考になればよいです。

\ チェック /

IPointerxxxHandlerでクリックイベントを実装してみる

敵キャラクターがだいぶ形になったので、もうそろそろモグラたたきらしくマウスクリックでたたけるようにしていこうと思います。マウスの動作を受ける方法は対象のゲームオブジェクトにEventTrigerコンポーネントをつけたり、Buttonコンポーネントをつけたりなどいろいろあるのですが、今回はIPointerxxxHandlerを使っていきます。

本記事のポイント

  • IPointerxxxHandlerを使ったクリック検知のスクリプトの書き方
  • IPointerxxxHandlerを使うための3つの設定

IPointerxxxHandlerとインターフェース

インターフェースってなに?

IPointerxxxHandlerの「I」はインターフェースを意味します。

今回もざっくり解説。

インターフェースをざっくり解説

  1. クラスAさんにある決まった仕様の外装(名前と引数、戻り値の型が決まった関数のガワ)を渡すから必ず使ってね。でも仕様(引数、戻り値)から外れなければ中身はクラスAさんに必要なものを入れて実装してもらっていいですよ という仕組みです。
  2. これによってクラスAさんクラスBさんいった異なるクラスに、同じ名前、意味/役割をもちながら詳細のちがう関数を実装することができます。
  3. もっとイメージ的な感じだと機能の継承という感じ
  4. 例えばダメージ判定の機能IDamgeがあったときに、プレイヤーの攻撃はIDamegeを持った敵、障害物にそれぞれの処理でダメージを与えることができる。障害物のなかでもIDamegeを持った障害物は壊せるけど持たないものは壊せない、などの処理ができるみたいな感じです。
  5. 本当はもっと意味があるようですが今回はこのくらいのイメージでいきましょう。

ちょっとまだイメージ沸きにくいかもしれませんが、習うより慣れろてことで実際にスクリプトを書いて確認していきます。

IPointerDownHandlerでOnPointerDown関数の実装をする

新たにEnemyを操作するEnemyControllerクラスを作ってUnitychanにアタッチします。スクリプトを追加していきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//IPointerDownHandlerを含む名前空間(識別をはっきりするためのグループ、フォルダー的なイメージで)
//を使うのでこの後は省略するよという宣言
using UnityEngine.EventSystems;

public class EnemyController : MonoBehaviour, IPointerDownHandler//インターフェースを実装したクラスであると宣言インターフェースを実装したクラスであると宣言
{
    

    //IPointerDownHandlerインターフェースの関数
    //マウスが押されたメッセージを受け取り実行される
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("クリックされました");
    }

}

スクリプトざっくり解説

  1. (5)using IPointerDownHandlerを含む名前空間「Eventsystems」を使うのでこの後の記述では省略しますよという宣言
  2. (8)インターフェース「IPointerDownHandler」の関数OnPointerDownを実装したクラスであると宣言
  3. (14)「IPointerDownHandler」インターフェースの関数OnPointerDown コールバックという方法でマウスクリックされたときに呼び出されます。コールバックについては、またいずれざっくる説明するかも。。。
  4. (10)インスペクターで「Enemy」に自身をアサインします。

スクリプト自体は上記3つを追加するだけ。簡単だったと思います。

それではゲーム再生して対象をクリックしてみましょう。どうですか?多分何も起こらないと思います。

実はクリックイベントのメッセージを受け取るのにはスクリプト以外3つの設定が必要です。

IPointerxxxHandlerを使う上の3つの設定

クリックイベントがうまくいかないときにチェックが必要な3つの設定をまとめてみました。

1.PhysicsRaycaster

まず一つ目はメインカメラにPhysicsRaycasterコンポーネントの追加です。今回は2DなのでPhysics2DRaycasterを追加します。

PhysicsRaycasterとはざっくり解説

  1. Ray(光線)をCast(投射)してその光線の衝突判定で、入力イベントがどこで発生したかを検出するシステムです。

2.Collider

Raycasterの光線は出ているだけでは意味がないので、対象のゲームオブジェクトで受ける必要があります。その判定に必要なのがColliderです。

対象のゲームオブジェクトにBoxCollider2Dコンポーネントを追加します。Colliderのサイズはゲームオブジェクトにに合わせて適宜調整してください。

3.EventSystem

個人的にはこれが一番忘れがちなのですが、マウスの操作やRaycasterのイベントを送信する役割が必要になります。それがEventSystemです。

UIを作成すると自動的に作られるのですが、UIを作成してない段階だと無いことに気付かずハマることが多いので気を付けましょう。

EventSystemの設置

  1. ヒエラルキー上で右クリック
  2. 「UI」>「イベント」でヒエラルキー上に作成できます。

ゲーム再生してクリックしてみましょう。コンソールにログが出たらOKです。

IPointerxxxHandlerのクリックイベント実装に必要なもの

  • スクリプト
  • Raycaster
  • Collider
  • EventSystem

クリックイベントが発生しない場合は上記がそろってるか確認しよう!

IPointerxxxHandlerの種類

最後にIPointerxxxHandlerの種類をざっとまとめてみました。

インターフェースメソッドタイミング
IPointerClickHandlerOnPointerClickオブジェクト上でポインターを押下し、同一のオブジェクト上で離した際
IPointerDownHandlerOnPointerDownポインターがオブジェクトを押下したとき
IPointerEnterHandlerOnPointerEnterポインターがオブジェクトに乗ったとき
IPointerExitHandlerOnPointerExitポインターがオブジェクトから離れたとき
IPointerUpHandlerOnPointerUpポインターを離したとき

EventSystemsのHandlerインターフェースにはドラッグなどもあるので、使いどころが多そうです。

まとめ

IPointerxxxHandlerまとめ

  • スクリプトに必要な3つは名前空間「using UnityEngine.EventSystems」、「使用するインターフェースの宣言」、「インターフェースのメソッド」です。
  • スクリプト以外で必要な3つ、クリックイベントがうまくいかないときチェックすべき3つは「Raycaster」「Collider」「EventSystem」です。
ユニティちゃん公式ホームページへ
ユニティちゃん公式ホームページ
ユニティちゃんライセンス
ユニティちゃんの画像、素材、ライセンスロゴはユニティちゃんライセンス条項を元に使用しています

\ 初学に使った書籍です /

動画×解説でかんたん理解! Unityゲームプログラミング超入門

大角 茂之/大角 美緒

マケイヌ的おすすめ度

わかりやすい度

提供素材がよくてテンション上がる度

〇おすすめポイント

素材が良くてモチベがあがります。

×よくないポイント

動画解説前提なので図版が小さいのが玉に瑕

\ Unityのスクリプトを書くのに役立ちます /

もっと早く教えてほしかった!Unity C#入門

MARU

マケイヌ的おすすめ度

わかりやすい度

目指せ脱初心者

〇おすすめポイント

ボリューム大でC#学習にもよく使う関数のチェックにもOK

×よくないポイント

始めたばかりの人にはちょっと難しい

おすすめ記事

 

プロフィール

マケイヌ

人生のメインストリームから外れた40代の♂。

90年代オルタナにはまり、文字通りメインストリームから逸脱。 その後もたびたび人生から逃亡。

心が動いた作品の紹介や 自分のちいさな経験、HowToを発信できればと日々模索中。

1年後までにイラストと写真のポートフォリオをつくりたい。

記:2019年12月

▼プロフィールはこちら

Follow me

アーカイヴ