Unity 6で2Dイラストをクリックしてイベントハンドラを実行する方法

広告

Unityで2Dゲームやノベル風の画面を作っていると、「画面上のイラストをクリックしたら処理を実行したい」という場面があります。

この記事では、Unity 6で2Dイラストをクリックし、イベントハンドラを実行するシンプルな方法を紹介します。クリック対象のイラストは、Tilemapではなく個別のSprite GameObjectとして配置する前提です。

作るもの

今回は、2Dイラストをクリックするとイベントハンドラが実行され、Consoleにメッセージを表示する仕組みを作ります。

  • キャラクターをクリックして会話を始める
  • アイテムをクリックして取得する
  • 看板やドアをクリックして調べる
  • イラストをクリックしてシーンを切り替える

OnMouseDown()ではなくIPointerClickHandlerを使う

古いUnityのチュートリアルでは、クリック処理にOnMouseDown()を使う例がよくあります。

OnMouseDown()はUnity 6でも動作しますが、Legacy扱いです。そのため、Unity 6向けに新しく実装する場合は、EventSystemIPointerClickHandlerを使う方法がおすすめです。

1. 2Dイラストをシーンに配置する

クリック対象にしたい画像をUnityにインポートします。

操作:画像ファイルをAssetsフォルダに入れ、InspectorでTexture TypeSprite (2D and UI)になっていることを確認します。

その後、画像をSceneビューにドラッグすると、Sprite Rendererを持つGameObjectとして配置できます。

2. Collider 2Dを追加する

クリック判定には、対象オブジェクトにCollider 2Dが必要です。

操作:クリック対象のGameObjectを選択し、InspectorでAdd Componentを押して、Box Collider 2Dを追加します。

画像の形に合わせて当たり判定を調整したい場合は、SizeOffsetを変更します。丸いイラストならCircle Collider 2D、複雑な形ならPolygon Collider 2Dを使っても構いません。

3. CameraにPhysics 2D Raycasterを追加する

IPointerClickHandlerで2Dオブジェクトをクリック判定するには、CameraにPhysics 2D Raycasterが必要です。

操作:Main Cameraを選択し、InspectorでAdd Componentを押して、Physics 2D Raycasterを追加します。

これにより、マウスやタップ位置から2D物理判定へのRaycastが行われるようになります。

4. EventSystemを用意する

シーンにEventSystemが必要です。

操作:HierarchyにEventSystemがない場合は、UnityメニューからGameObject → UI → Event Systemを選びます。

Unity 6でInput Systemを使っている場合は、EventSystemにInput System UI Input Moduleが設定されていることを確認してください。古いInput Managerを使う場合は、Standalone Input Moduleでも動作します。

5. クリック処理用のスクリプトを作る

Assetsフォルダ内でC#スクリプトを作成し、名前をClickableIllustrationにします。

スクリプト例:

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class ClickableIllustration : MonoBehaviour, IPointerClickHandler
{
    [SerializeField]
    private UnityEvent onClicked;

    public void OnPointerClick(PointerEventData eventData)
    {
        onClicked?.Invoke();
    }
}

IPointerClickHandlerを実装すると、オブジェクトがクリックされたときにOnPointerClick()が呼ばれます。

UnityEventを使っているため、クリック時に実行する処理はInspectorから設定できます。

6. スクリプトをイラストにアタッチする

作成したClickableIllustrationスクリプトを、クリック対象の2Dイラストにアタッチします。

対象オブジェクトには、最終的に次のコンポーネントが付いていればOKです。

  • Sprite Renderer
  • Box Collider 2D
  • Clickable Illustration

7. イベントハンドラを作る

クリックされたときに実行する処理を別スクリプトに用意します。

スクリプト例:

using UnityEngine;

public class IllustrationEventReceiver : MonoBehaviour
{
    public void ShowMessage()
    {
        Debug.Log("2Dイラストがクリックされました!");
    }
}

このスクリプトを任意のGameObjectにアタッチします。たとえば、空のGameObjectを作成してEventReceiverという名前にし、そこにIllustrationEventReceiverを付けます。

8. Inspectorでイベントを登録する

クリック対象の2Dイラストを選択します。

操作:ClickableIllustrationコンポーネントのOn Clickedに、IllustrationEventReceiverを付けたGameObjectを登録します。

その後、実行する関数としてIllustrationEventReceiver → ShowMessage()を選びます。

これで、2DイラストをクリックするとShowMessage()が実行されます。

動かないときの確認ポイント

  • クリック対象にCollider 2Dが付いているか
  • Main CameraPhysics 2D Raycasterが付いているか
  • シーンにEventSystemがあるか
  • EventSystemのInput Moduleが現在の入力方式に合っているか
  • クリック対象のLayerがRaycast対象になっているか
  • Cameraからクリック対象が見えているか
  • クリック対象のGameObjectが非アクティブになっていないか

Tilemapではなく別Spriteにする理由

クリックしてイベントを起こす重要なイラストは、Tilemapに含めず、個別のSprite GameObjectとして置く方が管理しやすくなります。

Tilemapは床・壁・背景・大量に並ぶ装飾のように、まとめて扱う要素に向いています。一方、キャラクター、宝箱、看板、ドア、調べられるオブジェクトのように個別の処理を持つものは、別Spriteにしておくとイベント設定が簡単です。

まとめ

Unity 6で2Dイラストをクリックしてイベントを実行するなら、次の構成がおすすめです。

  • Sprite Renderer
  • Collider 2D
  • Physics 2D Raycaster
  • EventSystem
  • IPointerClickHandler
  • UnityEvent

OnMouseDown()より少し設定は増えますが、Unity 6ではEventSystemIPointerClickHandlerを使う方が安心です。

クリック対象のイラストはTilemapに含めず、個別のSprite GameObjectとして配置すると、イベントの登録や管理が簡単になります。

訪問数 8 回, 今日の訪問数 8回

広告