Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

Mouse入力 Event, OnMouse, Input

Mouse入力(および、タッチセンサー入力)を受け取るには、次の3つの方法がある。

1)Event
キー入力とMouse操作が発生した時に発信されるEventを受け取る。
ただし、Eventは、OnGUIの中のみで受け取れる(ようだ)

using UnityEngine;
using System.Collections;

public class RotateObject : MonoBehaviour {
	void OnGUI(){
		Event e = Event.current;
		if(e.button == 0 && e.isMouse){
			Debug.Log (e.delta);
		}
	}
}

e.buttonは、マウスボタンの種類。

e.button 0:左ボタン、1:右ボタン、2:中ボタン

e.isMouse == true は、マウスイベントであることを示す。


2)OnMouse
MonoBehaviourのメソッドとして用意されている、Mouse関連の関数を使う方法
Scriptのアタッチ先は、GUIElemmentかColliderを持つオブジェクトのみで、オブジェクトとマウスとの関係が重要

OnMouseEnter オブジェクト上に入った時に一度だけ呼ばれる。ボタンの状態は無関係
OnMouseExit オブジェクトから出た時に一度だけ呼ばれる。ボタンの状態は無関係
OnMouseDown オブジェクト上で左ボタンを押した。オブジェクト外で左ボタンを押してからオブジェクト内に入っても呼ばれない
OnMouseDrag マウス左ボタンを押したまま動かした。押したままオブジェクト外にでても有効
OnMouseOver オブジェクト上に入っている状態。OnMouseEnterと違って何度も呼ばれる
OnMouseUp オブジェクト上で左ボタンをアップ。オブジェクト外でアップしても呼ばれる。
OnMouseUpAsButton オブジェクト上で左ボタンをアップ。オブジェクト外でアップした場合は呼ばれない。


3)Input
アタッチされたオブジェクトと関係なくMouseの動作を取得する。通常は、Update()、FixedUpdate()の中で使用する。

GetMouseButton 左ボタンをおした状態。毎回呼ばれる。
GetMouseButtonDown 左ボタンをおした動作。押した際に一度だけ呼ばれる
GetMouseButtonUp 左ボタンを話した動作。一度だけ呼ばれる

*引数はすべて共通で、0:左ボタン、1:右ボタン、2:中ボタン