Unityでマウスイベントを扱おうとすると反応しないことがあったので調べました。
結論としては、3Dオブジェクト、2Dスプライト、UI Image, UI Buttonでそれぞれやり方が違いました。
3Dオブジェクトの場合
スクリプトに下記を書いてあげれば勝手に反応する
void OnMouseDown() { Debug.Log("OnMouseDown"); } void OnMouseDrag() { Debug.Log("OnMouseDrag"); } void OnMouseUp() { Debug.Log("OnMouseUp"); }
2Dスプライトの場合
Collider2Dコンポーネントを追加して、スクリプトに下記を書いてあげれば勝手に反応する
(ちなみにUI ImageにColliderつけても反応しなかった。)
void OnMouseDown() { Debug.Log("OnMouseDown"); } void OnMouseDrag() { Debug.Log("OnMouseDrag"); } void OnMouseUp() { Debug.Log("OnMouseUp"); }
UI Imageの場合
Event Triggerコンポーネントを追加すると各種イベントを追加できる。
public void OnPointEnter() { Debug.Log("OnPointEnter called."); } public void OnPointExit() { Debug.Log("OnPointExit called."); } public void OnPointDown(BaseEventData data) { Debug.Log("OnPointDown called."); } public void OnPointUp() { Debug.Log("OnPointUp called."); } public void OnPointClick() { Debug.Log("OnPointClick called."); } public void OnDrag() { Debug.Log("OnDrag called."); } public void OnBeginDrag() { Debug.Log("OnBeginDrag called."); } public void OnEndDrag() { Debug.Log("OnEndDrag called."); }
UI Buttonの場合
デフォルトのButtonコンポーネントの項目に「On Click」というのがあるのでそこに関数を追加する
以上、全然統一感がないのでなんとかしてほしい。。