NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/RaycastDetect.cs

74 lines
2.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// 检测穿透点击是否点击了UI下方的按钮
/// </summary>
public class RaycastDetect : MonoBehaviour
{
public UnityAction ClickAction;
public UnityAction DefaultAction;
void Update()
{
if (Input.GetMouseButtonUp(0))
{
// 检测点击事件
PointerEventData pointerData = new PointerEventData(EventSystem.current)
{
position = Input.mousePosition
};
// 获取点击的UI对象
var results = new System.Collections.Generic.List<RaycastResult>();
EventSystem.current.RaycastAll(pointerData, results);
if (results.Count > 0)
{
GameObject clickedObject = results[0].gameObject;
if (clickedObject != this.gameObject)
{
//上层有其他UI
return;
}
foreach (var result in results)
{
//获取点击的按钮
if (result.gameObject.GetComponent<Button>() is not null)
{
DefaultAction?.Invoke();
result.gameObject.GetComponent<Button>().OnPointerClick(pointerData);
return;
}
}
ClickAction?.Invoke();
//GameObject clickedObject = results[0].gameObject;
//if (clickedObject == mainButton.gameObject)
//{
// // 点击的是主界面按钮
// OnMainButtonClick();
//}
//else if (clickedObject.transform.IsChildOf(sidebar.transform))
//{
// // 点击的是侧边栏内部区域
// // 可以在这里处理侧边栏内部的点击事件
//}
//else
//{
// // 点击的是非交互区域
// HideSidebar();
//}
}
else
{
// 点击的是非交互区域
//HideSidebar();
}
}
}
}