내일배움캠프 7주차 1일차 - 레이캐스팅

백흰범·2024년 5월 27일
1
post-thumbnail

오늘 한 일

  • 챌린지반 과제 풀이
  • 스파르타 코딩클럽 진도 나가기 (~ 1-10)


Raycast

개념

유니티의 기능 중 하나로 보이지 않는 선(Ray)을 출력하여 해당 선에 닿인 오브젝트들의 정보를 가져오는 유니티 기능 중 하나이다.



사용 방법

Ray 만들기

Ray ray = new Ray(transform.position, transform.forward); // 오브젝트
Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); // 카메라 중심
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)); // 마우스

Raycast를 활용해서 검출하기

void Update()
{
    IsPlayer();
}

void IsPlayer()
{
   Ray ray = new Ray(lazer.position, Vector3.forward); // (위치, 방향)
   if (Physics.Raycast(ray, 10f, playerLayerMask))
   {
       text.text = "정면 감지됨";
   }
}


Raycast()

매개 변수에 대한 설명

origin

  • Ray 시작점

direction

  • Ray 방향

! 위 둘을 퉁쳐서 ray를 넣기도 한다.

maxDistance

  • Ray의 최대 검출 거리 (기본값은 Infinite이다)

layerMask

  • Ray에 적중된 오브젝트가 건네준 레이어와 동일한 지 검사

RaycastHit

  • 가장 가까운 오브젝트의 정보를 가져옴
    -> RaycastHit - 객체의 정보
    -> RaycastHit.point - 레이캐스팅이 감지된 위치
    -> RaycastHit.distance - Ray의 원점에서 충돌 지점까지의 거리
    -> RaycastHit.transform - 충돌 객체의 transform 정보

queryTriggerInteraction

  • 적중된 오브젝트들을 쿼리를 통해서 감지할 지 무시할 지 정한다.


각종 오버로딩

-> Physics.Raycast



사용 시 알아야할 것

Raycast를 제대로 활용하려면 오브젝트의 방향이 어디인지 알아야한다.

  • 해당 화살표들은 보면, 빨간색은 X, 녹색은 Y, 파란색은 Z 방향이다.


실험 코드

 void IsPlayer()
 {
     Ray rayF = new Ray(lazer.position, Vector3.forward); // (위치, 방향)
     Ray rayB = new Ray(lazer.position, Vector3.back);
     Ray rayL = new Ray(lazer.position, Vector3.left);
     Ray rayR = new Ray(lazer.position, Vector3.right);
     Ray rayU = new Ray(lazer.position, Vector3.up);

     if (Physics.Raycast(rayF, 10f, playerLayerMask))
     {
         text.text = "정면 감지됨";
     }
     else if (Physics.Raycast(rayB, 10f, playerLayerMask))
     {
         text.text = "후면 감지됨";
     }
     else if (Physics.Raycast(rayL, 10f, playerLayerMask))
     {
         text.text = "좌측 감지됨";
     }
     else if (Physics.Raycast(rayR, 10f, playerLayerMask))
     {
         text.text = "우측 감지됨";
     }
     else if (Physics.Raycast(rayU, 10f, playerLayerMask))
     {
         text.text = "상측 감지됨";
     }
     else
     {
         text.text = "아무것도 감지되지 않음";
     }
 }


영상 결과

  • 기본적인 시험
  • 해당 영상을 보면 아래와 같은 결과가 도출될 수 있음을 알 수 있다.

  • 오브젝트들을 관리할 때 이 화살표를 유의하면서 Raycast를 활용해주자

  • rotation을 돌려서 시험
  • rotation이 바뀐거랑 Ray의 방향이랑은 전혀 관계가 없는 것 같다.



작성하면서 느낀점

새로운 강의 자료가 나오니 실력을 더 쌓을 수 있게 될 수 있어서 좋은 반면 해당 강의 내용을 제대로 소화해내려면은 TIL을 좀 더 간결하고 알차게 써줘야할 필요성이 느껴진다.

profile
게임 개발 꿈나무

0개의 댓글