피킹(Picking)

이인혁·2024년 8월 21일
0

유니티

목록 보기
8/20

유니티에서 Scene에 마우스로 오브젝트를 배치하거나 오브젝트를 이동시키거나 오브젝트를 선택해봤을 것입니다. 근데 유니티상에서 3D인 물체를 어떻게 2D인 모니터를 통해서 정확히 오브젝트를 집을 수 있을까요? 바로 레이케스트(Raycast)를 이용한 것입니다.

레이케스트(Raycast)

Raycast의 Ray는 선이라는 뜻입니다. Raycast는 그럼 말 그대로 선(레이저)를 쏴서 오브젝트를 감지하는 시스템입니다. 선을 쐈을 때 감지는 콜라이더(Collider)를 이용합니다. 선을 쐈을 때 충돌이 일어나면, 충돌이 일어난 오브젝트를 감지하는 것입니다. 유니티 스크립트에서도 Raycast를 구현할 수 있습니다. Physics라는 클래스의 Raycast라는 함수가 존재합니다.

Physics.Raycast(Raycast 중심, Ray를 보낼 방향, out hit(맞은 물체를 출력), 선을 보내 감지할 최대 거리)

// 보통 함수는 반환개수가 1개 아니면 0개입니다. 
// 근데 2개를 반환하고 싶을 때 저렇게 인수로 out키워드를 붙여주면 매개변수로 밖에서 선언한 변수를 넣어줄 수 있습니다. 
// out으로 붙여준 변수에 함수내에서 값을 보내줄 수 있습니다.

위의 함수는 반환형이 bool타입입니다. 감지하면 true, 아니면 false를 반환합니다. 따라서 if안에 많이 사용합니다. 그리고 hit에 감지한 오브젝트를 저장하기 때문에 그 오브젝트에 접근도 가능합니다.

피킹(Picking)

다시 돌아와서 유니티는 Scene에서 오브젝트를 만질 때 기본적으로 Raycast형식을 사용합니다. 마우스를 통해 화면의 특정 지점에 있는 오브젝트를 찾아냅니다. 레이케스트의 중심을 그럼 뭘까요? Scene을 출력하는 Camera가 있다고 하면 Camera가 레이케스트의 중심입니다. 그 중심에서 near plane의 마우스 위치로 나가는 레이캐스트를 구성합니다. 그 레이케스트를 이용해 레이에 닿는 물체가 있는지 검사합니다. 있으면 물체에 대한 정보를 가져올 수 있습니다.

profile
게임개발공부블로그

0개의 댓글