Help us understand the problem. What is going on with this article?

Unityからマウスカーソルを操作する

More than 1 year has passed since last update.

Unityからマウスカーソルを操作してみる

(あるいは Win32 APIの利用について / デスクトップマスコット風プロ生ちゃん添え)

Unityでデスクトップマスコット風プロ生ちゃんを作ってみました。

マウスカーソルをUnityから操作するテストです。

ファイルはこちら。https://t.co/jaqEarFefT pic.twitter.com/bvRMIGJs7t

— キルロボ (@kirurobo) 2016年12月8日

プロ生ちゃん Advent Calendar 2016 に空きがありましたので "マウスカーソルを引き寄せる能力をもったデスクトップマスコット風プロ生ちゃん" を作って載せてみました。

Windows専用です。下記からダウンロードできます。
https://github.com/kirurobo/UnityWindowController/releases/download/Ver.0.1.0/Demo_PronamaChanDesktop_Win32.zip

(ただ、環境によっては起動直後に真っ白になってしまうかも。そのときは[End]か[Home]を2回押すとたぶん表示されます。)
(また、ウィンドウ枠がないデスクトップマスコット風ですが、実際には矩形のウィンドウがありますので後ろは操作できなかったりします。)

中身はUnityパッケージでも置いておこうと思いますが、一部ユニティちゃんのモーションを使っていたのでライセンス的に公開できるかどうかわからず本日時点ではまだ用意できていません m(__)m
後日公開したいと思います。

プロ生ちゃん要素は以上です。

発端は光輝さんの下記ツイートを拝見して、単にカーソル移動くらいなら前に作ったなーということで今でも Unity で動くか確認してみようということで試したものです。

デスクトップマスコット風プロ生ちゃんを起動してフォーカスがある状態で [Shift] キーを押すと、マウスカーソルを引き寄せます。

Win32 API でマウスカーソルを移動させるだけなら割合簡単で、Plugins フォルダに何か置いたりする必要もなく、下記のようなC#スクリプトを作成して、適当なものにアタッチさせれば動きました。
こんな感じで他の Win32 API 関数も呼べます。

CursorController.cs
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class CursorController : MonoBehaviour {

    [DllImport("user32.dll")]
    public static extern bool SetCursorPos(int x, int y);

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetButton("Fire1"))
        {
            SetCursorPos(400, 400);
        }
    }
}

ポイントは
・ using System.Runtime.InteropServices を入れる
・ [DllImpot("user32.dll")] で使う関数を書く
というところです。

マウスカーソル移動だけだとあまり実用性はありませんが、マウスボタン押下も組み合わせるとペイント上に落書きとかできるかもしれません。
(今回のプロ生ちゃんはカーソル移動しか入れられていませんが。)

ただ、ボタン押下になるともうちょっと色々と書かないといけません。

というわけでボタン押下や、ウィンドウを操作する関数、Aeroによるウィンドウ透過を含めてGitHubにて公開してあります。よろしければご覧ください。
https://github.com/kirurobo/UnityWindowController
私が作成した部分は Unlicense (パブリックドメイン相当)になっています。また、Wrapper/WinApi.cs もパブリックドメイン相当です。


2017/01/03 追記
起動時に真っ白になっていたことの対策や、モーションの修正をしたうえでソースを UnityPackage の形でも公開しました。
https://github.com/kirurobo/UnityWindowController/releases/
に Demo_PronamaChanDesktop.unitypackage としてアップしてあります。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away