این کد همونطور که از عنوان کد مشخصه برای اینه که برسی کنه موس روی رابط کاربری (UI) هست یا نه.

کاربردش برای زمانی هست که شما نیاز دارید بازی در مقابل کلیک صفحه واکنش نشان بده اما دوست ندارید وقتی یک دکمه روی UI کلیک شد بازی واکنش نشان بده چون جزو بازی نیست.این تکه کد برای تاچ کاربردی نیست.

این کد با استفاده از الکوی singleton پیاده سازی شده و کلاس ها میتونن از نمونه Static کلاس به اون دسترسی پیدا کنن. همچنین کد تا حد خوبی کامنت گذاری شده تا خواناییش بالاتر بره.

 

کد کلاس UITouchChecker.cs

using UnityEngine;
using UnityEngine.EventSystems;


/// <summary>
/// holds the state of touch over UI objects
/// sample use:
///     if(UITouchChecker.ins.isTouchOverUI) ...
/// </summary>
public class UITouchChecker : MonoBehaviour
{
    public static UITouchChecker ins { get; private set; }

    private void Awake()
    {
        //singleton
        if (ins && ins != this)
            Destroy(this);
        ins = this;

    }
    /// <summary>
    /// checks if current touch is over ui object like button
    /// </summary>
    /// <returns>true if touch is over ui</returns>
    public bool isTouchOverUI
    {
        get
        {
            if (EventSystem.current.IsPointerOverGameObject() ||
                EventSystem.current.currentSelectedGameObject != null)
            {
                print("touch on ui");
                return true;
            }
            return false;
        }
    }
}