按钮自动触发UI事件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UGUI_AutoClick : MonoBehaviour
{
public Button uiButton1;
public Button uiButton2;
public Image uiImage;
void Start()
{
uiButton1.onClick.AddListener(this.__onClick);
uiButton2.onClick.AddListener(this.__onClick);
}
void OnGUI()
{
if (GUI.Button(new Rect (100,100,200,200), "Auto Button"))
{
//调用会触发Button的按钮变色
ExecuteEvents.Execute<ISubmitHandler>(uiButton1.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.submitHandler);
}
if (GUI.Button(new Rect(300, 100, 200, 200), "Auto Button"))
{
//调用不会触发按钮变色
ExecuteEvents.Execute<IPointerClickHandler>(uiButton2.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerClickHandler);
}
if (GUI.Button(new Rect(100, 300, 200, 200), "Auto Image"))
{
ExecuteEvents.Execute<IPointerClickHandler>(uiImage.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerClickHandler);
}
}
private void __onClick()
{
Debug.Log("按钮点击");
}
}
鼠标是否悬浮在UI上,判断鼠标是否在UI上
void Update()
{
// 检查鼠标是否悬浮在任何UI元素上
if (EventSystem.current.IsPointerOverGameObject())
{
Debug.Log("鼠标当前悬浮在UI上");
}
else
{
Debug.Log("鼠标当前不在UI上");
}
}
/// <summary>
/// 2 判断鼠标的位置是否在UI上
/// </summary>
/// <returns>true:当前点击在UI上 false:当前不点击在UI上</returns>
public static bool IsPointerOverUIObject()
{
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
#if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE)
eventDataCurrentPosition.position = Input.GetTouch(0).position;
#else
eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
#endif
List<RaycastResult> results = new List<RaycastResult>();
if (EventSystem.current)
{
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
}
for (int i = 0; i < results.Count; i++)
{
if (results[i].gameObject.layer == LayerMask.NameToLayer("UI")
)
return true;
}
return false;
}
Ugui组件VerticalLayoutGroup(HorizontalLayoutGroup)可以使子物体垂直或者水平 整齐排列,与ContentSizeFitter结合使用开启更多功能。