Unity 는 마우스 가 머 무 는 위치 에 있 는 물 체 를 어떻게 가 져 옵 니까?
/// <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 차원 화면 좌 표를 되 돌려 줍 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.