【Unity】Windowsのマウスイベントをシミュレートする

Post : 2022/10/10 Update : 2022/10/10

需要が有るのか無いのかは分かりませんが、UnityでWindowsのマウスイベントを発行してみます。

イベント発行用のMouseSimulatorクラスを作成してその中に書いていきます。

1.クリックしてみる

マウスのイベントを発行するためにmouse_event関数を使います。

mouse_event関数はuser32.dllに実装されているためDllImport属性を使用して下のように宣言していきます。

https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-mouse_event?redirectedfrom=MSDN

using UnityEngine;
using System.Runtime.InteropServices;    //追加

public class MouseSimulator : MonoBehaviour
{

    //追加
    [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
    static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
}

クリックのイベントはマウスがダウン->アップの順番で発行されるので

とりあえず左マウスのアップダウンを宣言します

using UnityEngine;
using System.Runtime.InteropServices;    //追加

public class MouseSimulator : MonoBehaviour
{
    private const int MOUSEEVENTF_LEFTDOWN = 0x0002;  //左マウスダウン
    private const int MOUSEEVENTF_LEFTUP = 0x0004;    //左マウスアップ
    //----省略----//

キーボードのQで左クリックが発行されるように、Updateに書いていきます。

void Update()
{
    if (Input.GetKeyDown(KeyCode.Q))
    {
        // マウスの左ボタンダウン
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);              
    }
    else if (Input.GetKeyUp(KeyCode.Q))
    {
        // マウスの左ボタンアップ
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    }
    else if (Input.GetMouseButtonDown(0))
    {
        Debug.Log("左マウスボタンダウン!");
    }
    else if (Input.GetMouseButtonUp(0))
    {
        Debug.Log("左マウスボタンアップ!");
    }
}

Qキーを押下でマウスダウン、押上でマウスアップのイベントが発行されました。

(かなりニッチ内容だな)