unity中利用layer的方式来获取指定层级上的对象,例如UI层的某个对象
1.按下鼠标左键,检测鼠标点击到的UI对象
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class CustomBookMouseController : MonoBehaviour { public LayerMask m_layerMask = 1; public float m_dis = 1000; public Camera m_rayCamera; // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { if (EventSystem.current.IsPointerOverGameObject()) { PointerEventData pointerData = new PointerEventData(EventSystem.current); pointerData.position = Input.mousePosition; List<RaycastResult> results = new List<RaycastResult>(); EventSystem.current.RaycastAll(pointerData, results); for (int i = 0; i < results.Count; i++) { if (results[i].gameObject.layer==LayerMask.NameToLayer("BookUI")) { Debug.Log(results[i].gameObject.name); } Debug.Log(results[i].gameObject); } } } } }
2.物理射线的应用 需要在检测对象上添加碰撞器组件
var ray = m_rayCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, m_dis, m_layerMask)) { Debug.Log(hitInfo.collider.gameObject.name); }