Unity 는 마우스 가 머 무 는 위치 에 있 는 물 체 를 어떻게 가 져 옵 니까?

UGUI 의 방사선 검사 시스템 에 따라 현재 마우스 아래 UI 가 져 오기:

/// <summary>
    ///        UI
    /// </summary>
    /// <param name="canvas"></param>
    /// <returns></returns>
    public GameObject GetOverUI(GameObject canvas)
    {
        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;
    }
그 중에서 results 는 마우스 아래 UI 의 목록 입 니 다.
UGUI 뿐만 아니 라 카메라 에 PhysicsRaycaster 구성 요 소 를 추가 해 카메라 로 전송 하면 3D 물 체 를 얻 을 수 있다.

/// <summary>
    ///          
    /// </summary>
    /// <param name="raycaster"></param>
    /// <returns></returns>
    public GameObject GetOverGameObject(GameObject raycaster)
    {
        PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
        pointerEventData.position = Input.mousePosition;
        PhysicsRaycaster pr = raycaster.GetComponent<PhysicsRaycaster>();
        List<RaycastResult> results = new List<RaycastResult>();
        pr.Raycast(pointerEventData, results);
        if (results.Count != 0)
        {
            return results[0].gameObject;
        } 
        return null;
    }
방금 문제 가 발생 했 습 니 다.제 UI 클릭 은 3D 물체 클릭 을 포함 하여 모두 사용 하 는 EventSystem,즉 위의 방법 입 니 다.이때 사용 합 니 다.
UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()라 는 방법 으로 마우스 가 UI 에 있 는 지 아 닌 지 를 판단 하면 마우스 가 3D 물체 에 나타 나 도 되 돌아 오 는 값 을 얻 을 수 있다.(전 삼 index 의 용법 을 연구 하지 않 았 다)위 에서 UI 를 얻 는 방법 을 직접 선택 했다.
스 크 립 트:

/************************************************************
*     :v1.0.0
*      :MouseOverController.cs
*     :2019/8/10 16:10:44
*     :  
*     :          
************************************************************/ 
using System.Collections.Generic; 
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; 
namespace LastZero.Utility
{
    public class MouseOverController
    {
        /// <summary>
        ///        UI
        /// </summary>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public static GameObject GetOverUI(GameObject canvas)
        {
            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;
        } 
        /// <summary>
        ///        UI
        /// </summary>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public static GameObject GetOverGameObject(GameObject camera)
        {
            if (camera.GetComponent<PhysicsRaycaster>() == null)
                camera.AddComponent<PhysicsRaycaster>(); 
            PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
            pointerEventData.position = Input.mousePosition;
            PhysicsRaycaster gr = camera.GetComponent<PhysicsRaycaster>();
            List<RaycastResult> results = new List<RaycastResult>();
            gr.Raycast(pointerEventData, results);
            if (results.Count != 0)
            {
                return results[0].gameObject;
            } 
            return null;
        }
    }
}
추가:유 니 티 에서 마우스 가 한 물 체 를 지나 갈 때 알림 이 나타 납 니 다.
우선 검 측 된 물 체 는 collider 가 있어 야 합 니 다.

using UnityEngine;
using System.Collections;
public class Cube : MonoBehaviour {
//    public Transform cube;
    bool isShowTip;
//    // Use this for initialization
    void Start () {
        isShowTip=false;
    }    
    void OnMouseEnter () {
        isShowTip=true;
        //Debug.Log (cube.name);//         
    }
    void OnMouseExit () {
        isShowTip=false;
    }
    void OnGUI () {
        if (isShowTip){
            GUI.Label(new Rect(Input.mousePosition.x,Screen.height-Input.mousePosition.y,100,40),"afdasdfasdf"); 
         }  
    }
}
추가:Unity 의 UGUI 에서 마우스 클릭 위치 와 UI 물체 의 화면 좌 표를 가 져 옵 니 다.
마우스 클릭 위치:
Input.mousePosition 속성 에 직접 접근 하여 3 차원 화면 좌표,즉 마우스 의 좌 표를 되 돌려 줍 니 다.
UI 물체 의 화면 좌표:
RectTransformUtility.WordToScreenPoint(Camera.main,rectTransform.position)는 2 차원 화면 좌 표를 되 돌려 줍 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기