赞
踩
百度学习了半天,最终拿了一个大哥(添加链接描述)的内容。本文仅作为个人笔记,建议大家直接去这大哥的博客看。不过我记得好像也可以通过继承unity内部的鼠标事件接口获取到物体,但是由于时间紧,等后面有时间或者想起了再加吧。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class NewBehaviourScript : MonoBehaviour { GameObject currentCanvas; void Start() { currentCanvas = gameObject; } void Update() { Debug.Log(GetUI(currentCanvas).name); } /// <summary> /// 获取鼠标停留处UI /// </summary> public static GameObject GetUI(GameObject canvas) { if (canvas.GetComponent<GraphicRaycaster>() == null) return null; PointerEventData pointerEventData = new PointerEventData(EventSystem.current); pointerEventData.position = Input.mousePosition; GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>(); List<RaycastResult> results = new List<RaycastResult>(); gr.Raycast(pointerEventData, results); if (results.Count != 0) { return results[0].gameObject; } return null; } }
所以要解决这个问题我们得把这个unity记录的地方在我们点击触发方法之后就把这个保存的按键给删除引用。
//在需要取消的地方加上这段就可以了
UnityEngine.EventSystems.EventSystem.current.SetSelectedGameObject(null, null);
加上这句代码就可以删除引用了。
if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())//如果鼠标在UI上就返回
{
return;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。