Unity 滑鼠 ( 鼠標, Mouse ) 監聽事件 ( Event) 的三種方法

前言:

我看網路其他文章都只有展示其中一種方法,而且每種方法都很零散,所以我今天要集大成,造福群眾。好了,廢話不多說,下面為大家展示 Unity 滑鼠 ( 鼠標, Mouse ) 進入物件時的三種監聽方法,每種各有優缺點,請自行參考與使用。

當然簡單的滑鼠進入監聽肯定滿足不了你,你可能還需要監聽 點擊 (Click), 拖拉 ( Drag ), 離開 ( Exit )… 等等高級操作,所以我下面提供 API 網址給大家,讓你們創造更多美好的事物。

API : https://docs.unity3d.com/ScriptReference/EventSystems.EventTrigger.html

方法一:

這是用繼承的方式,只能對掛載的 Game Object 有效果

using UnityEngine;
using UnityEngine.EventSystems;

public class NewBehaviourScript : MonoBehaviour, IPointerEnterHandler
{
    public void OnPointerEnter (PointerEventData p)
    {
        Debug.Log ("Enter Position : " + p.position);
    }
}

方法二:

該好處是可以遠程操控其他 Game Object ,使用起來比 ” 方法一 ” 更加靈活。

需要先在外部加入 Event Trigger 元件,如下圖:

Unity 滑鼠 ( 鼠標, Mouse ) 監聽事件 ( Event) 的三種方法_第1张图片

using UnityEngine;
using UnityEngine.EventSystems;

public class NewBehaviourScript : MonoBehaviour {

    public void OnMouseEnter(BaseEventData data)
    {
        PointerEventData p = data as PointerEventData;
        Debug.Log("Enter Position : " + p.position);
    }
}

方法三:

與 ” 方法二 ” 功能相同,不需要從外部加入 Event Trigger 元件,而且可以控制更多細節,程式碼當然也比較多。

using UnityEngine;
using UnityEngine.EventSystems;

public class NewBehaviourScript : MonoBehaviour
{
    public GameObject target;

    void Start ()
    {
        EventTrigger trigger = target.gameObject.AddComponent ();
        EventTrigger.Entry entry = new EventTrigger.Entry ();
        entry.eventID = EventTriggerType.PointerEnter;
        entry.callback.AddListener ((data) => {
            OnPointerEnter ((PointerEventData)data);
        });
        trigger.triggers.Add (entry);
    }

    public void OnPointerEnter (PointerEventData p)
    {
        Debug.Log ("Enter Position : " + p.position);
    }
}

執行結果:

當然啦,三種方法結果都相同,只要你的滑鼠進入物件範圍內,就會類似打印下面這種結果:

Unity 滑鼠 ( 鼠標, Mouse ) 監聽事件 ( Event) 的三種方法_第2张图片

寫在最後:

祝你們玩得開心,如果你們賺錢了記得分我一點。

你可能感兴趣的:(Unity,3D)