https://dobby-the-house-elf.tistory.com/74
유니티의 UGUI는 Canvas의 Render Mode가 'Screen Space - Overlay' 일 경우 카메라를 사용하지 않고 렌더링 과정에서 그려진 오브젝트들 위에 덧그려진다.
이때 UI에 Raycast를 사용하려면 어떻게 해야 할 까?
UGUI 오브젝트를 생성하면 자동으로 Canvas가 생성된다. 이때 Canvas를 살펴보면 Graphic Raycaster가 달려있는것을 볼 수 있다.
링크 : https://docs.unity3d.com/kr/530/Manual/Raycasters.html
유니티 메뉴얼에 따르면 Graphic Raycaster는 캔버스 안을 검색하는 Raycaster이며, EventSystem이 이벤트를 검출하는 수단으로 사용된다는 것을 알 수 있다.
하지만 메뉴얼에는 Graphic Raycaster를 어떻게 써야하는지 스크립트 예시가 적혀있지 않다. 그래서 예시를 만들어 두려고 한다.
// UGUI Canvas의 Render Mode가 'Screen Space - Overlay' 일 경우
// GraphicRaycaster 컴포넌트를 통해 마우스 이벤트를 받는 예시
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class GraphicRaycasterEx : MonoBehaviour
{
// 예시에서 사용할 GraphicRaycaster객체
private GraphicRaycaster gr;
private void Awake()
{
gr = GetComponent<GraphicRaycaster>();
}
private void Update()
{
var ped = new PointerEventData(null);
ped.position = Input.mousePosition;
List<RaycastResult> results = new List<RaycastResult>();
gr.Raycast(ped, results);
if (results.Count <= 0) return;
// 이벤트 처리부분
results[0].gameObject.transform.position = ped.position;
}
}
GraphicRaycaster는 UnityEngine.UI 에 PointerEventData는 UnityEngine.EventSystems에 있다.
가장 위쪽에 노출되어 있는 UGUI오브젝트부터 순서대로 results에 저장된다.
results[0]는 가장 위쪽에 있는 UGUI 오브젝트 이다.
'Unity' 카테고리의 다른 글
[Unity3D] Animation - Animation Event 사용법(5.6기준) (0) | 2020.04.10 |
---|---|
[Unity] yield return 종류 (0) | 2020.04.08 |
[Unity] Delegate 와 Event 설명 모음출처 (0) | 2020.04.06 |
[Unity3D] 트랜스폼(Transform) 크기(Scale) (0) | 2020.04.03 |
[Unity] renderer.material 과 renderer.sharedMaterial의 차이점 (0) | 2020.04.03 |