본문 바로가기
게임개발

[Unity] Physics.Raycast

by 개발도사(진) 2023. 1. 1.

*** 개발 중 공부하게 된 것들을 메모하는 페이지입니다. 오류가 많을 수 있습니다. ***

 

1. Raycast란?

Raycast란 "레이저를 발사시켜서 충돌을 감지하는" 것으로 이해할 수 있다. Raycast script를 가진 Object가 '원점'이 되고, 프로그래머가 설정한 '방향'으로 레이저를 쏘면, 레이저가 '정해진 거리만큼' 날아가다가 콜라이더를 가진 오브젝트를 만나면 '충돌을 감지'하는 개념이다.

 

 

2. 공식 문서

 

2-1. origin

Raycast script를 붙여 놓은 오브젝트. 오브젝트에 콜라이더가 붙어 있는 경우에는 제거하거나 LayerMask를 이용해서 원점 Object가 인식되지 않도로 조치를 취해야 한다.

 

2-2. direction

(가상의) 레이저가 날아갈 방향. 방향을 제대로 설정해 주지 않으면 충돌 검사를 하기 원하는 대상과 충돌하지 않을 수 있다.

 

2-3. maxDistance

 

2-4. layerMask

32bit int형. 비트 플래그로 비트로 구분됨. (=32개까지만 만들 수 있음) : 비트마스킹? 아직 명확히 이해되지 않음.

Raycasting을 할 대상 지정하는 역할. 

 

3. 사용례

Raycast hit;

if(Physics.Raycast(transform.position, tansform.forward, out hit, 100.0f){/.../}

=> Raycasting으로 충돌 감지 시 충돌 정보가 hit에 저장됨

 

4. Ray 활용법

Ray : 직선의 시작점, 방향점을 가지고 있는 구조체. 

 

4-1. 직접 생성하기

Ray ray = new Ray(transform.position, transform.forward);

 

4-2. 마우스 위치로부터  생성하기(ScreenPointToRay)

ray = Camera.main.ScreenPointToRay(Input.mousePosition);

 

4-3. 카메라 뷰포트에서 시작 시(ViewportPointToRay)

Ray ray = Camera.main.ViewportPointToRay(new Vector3 (/.../));

 

 

'게임개발' 카테고리의 다른 글

[Unity] Transform.SetParent  (0) 2023.01.19
[Unity] 추적 카메라  (0) 2023.01.03
[Unity] UI_Canvas  (0) 2023.01.03
[Unity] Collider  (0) 2023.01.01
[문제] Transparency Sort Axis가 Play mode 실행 시 원래대로 돌아가는 문제  (0) 2022.09.15