ボクステ公式ブログ

Unity6.2でマウスの左クリックと右クリックを判定する方法
Unity6.2(Ver.6000.2.7f2)でImageをマウスでクリックした際、それが左クリックだったのか、右クリックだったのか判断する方法を紹介します。
Unity6では、case -1:などボタン割当による判別ができません。新しいInput Systemでは、どのボタンをクリックしても全て-2になるという報告例があります。
そのため、新しいInput Systemに対応した判別法を述べます。
前提
YourProjectScene
|_Canvas
| |_Image
|_EventSystem
※EventSystemは、HierarchyのScene直下にあるとは限りません。オブジェクトやPlayerInputの中に生成されている場合もあります。その場合でも役割を果たすため、新規に追加しないでください。
スクリプトコード
クリックの左右を判定するために以下のスクリプトを作成します。
<新規スクリプトの作成>
Assets内にScripts等のフォルダがあればその中で右クリック>Create>MonoBehabior Scriptを左クリックし、新しくできたファイルにお好きな名前(例)「ClickDetection」を入力します。
なお、後からファイル名を変更した場合は、ファイル内の「public class 〇〇〇〇〇」部分も同じ名前に変更してください。両者が異なるとエラーとなります。
<コードの中身>
上記のスクリプトを、先ほど作成したImage要素を持つオブジェクトへドラッグ&ドロップしてください。
シーンビュー上部の▷をクリックしてゲームを実行(Play)します。
Image要素をクリックすると、UnityのConsoleに「Left Click」や「Right Click」と表示されるはずです。

クリックボタン判定中のコンソール
コードは自由にコピーペースト、改造してお使いください。
【クリックの左右を判定すると何ができるのか?】
例えば、ある一つの敵対オブジェクトに対して左クリックで攻撃、右クリックで防御するなど、複数の機能を割り当てることができます。
当社で開発中のシミュレーションゲームでは、アイテム欄整理時にアイコンを左クリックした時は1個移動、右クリックした時は10個移動するようにしています。
カテゴリ ゲーム開発
Unity6では、case -1:などボタン割当による判別ができません。新しいInput Systemでは、どのボタンをクリックしても全て-2になるという報告例があります。
そのため、新しいInput Systemに対応した判別法を述べます。
前提
- シーン内のどこかに「EventSystem」がある。
存在しない場合は、Hierarchy>右クリック>UI>EventSystemで作成してください。 - UI用Canvas>Image要素を持ったオブジェクトがある。
存在しない場合は、Hierarchy>右クリック>UI>CanvasでUICanvasを作成し、その子要素としてImageを作成してください。
YourProjectScene
|_Canvas
| |_Image
|_EventSystem
※EventSystemは、HierarchyのScene直下にあるとは限りません。オブジェクトやPlayerInputの中に生成されている場合もあります。その場合でも役割を果たすため、新規に追加しないでください。
スクリプトコード
クリックの左右を判定するために以下のスクリプトを作成します。
<新規スクリプトの作成>
Assets内にScripts等のフォルダがあればその中で右クリック>Create>MonoBehabior Scriptを左クリックし、新しくできたファイルにお好きな名前(例)「ClickDetection」を入力します。
なお、後からファイル名を変更した場合は、ファイル内の「public class 〇〇〇〇〇」部分も同じ名前に変更してください。両者が異なるとエラーとなります。
<コードの中身>
ClickDetection.cs
using UnityEngine;
using UnityEngine.EventSystems;//追加
public class ClickDetection :MonoBehaviour, IPointerClickHandler//追加
{
public void OnPointerClick(PointerEventData pointerEventData)
{
switch(pointerEventData.button)
{
case PointerEventData.InputButton.Left:
//左クリックした時の処理
Debug.Log("Left Click");
break;
case PointerEventData.InputButton.Right:
//右クリックした時の処理
Debug.Log("Right Click");
break;
case PointerEventData.InputButton.Middle:
//ホイールクリックした時の処理
Debug.Log("Middle Click");
break;
}
}
}
using UnityEngine.EventSystems;//追加
public class ClickDetection :MonoBehaviour, IPointerClickHandler//追加
{
public void OnPointerClick(PointerEventData pointerEventData)
{
switch(pointerEventData.button)
{
case PointerEventData.InputButton.Left:
//左クリックした時の処理
Debug.Log("Left Click");
break;
case PointerEventData.InputButton.Right:
//右クリックした時の処理
Debug.Log("Right Click");
break;
case PointerEventData.InputButton.Middle:
//ホイールクリックした時の処理
Debug.Log("Middle Click");
break;
}
}
}
上記のスクリプトを、先ほど作成したImage要素を持つオブジェクトへドラッグ&ドロップしてください。
シーンビュー上部の▷をクリックしてゲームを実行(Play)します。
Image要素をクリックすると、UnityのConsoleに「Left Click」や「Right Click」と表示されるはずです。

クリックボタン判定中のコンソール
コードは自由にコピーペースト、改造してお使いください。
【クリックの左右を判定すると何ができるのか?】
例えば、ある一つの敵対オブジェクトに対して左クリックで攻撃、右クリックで防御するなど、複数の機能を割り当てることができます。
当社で開発中のシミュレーションゲームでは、アイテム欄整理時にアイコンを左クリックした時は1個移動、右クリックした時は10個移動するようにしています。
カテゴリ ゲーム開発
