在Unity里,如何通过"层次标签(Layer)"找到并获取特定层级,如UI层中的某个游戏对象?
最编程
2024-02-07 18:17:54
...
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);
}