Unity cookbook 11

10
UNITY COOKBOOK SHOT BY. INS PART 11 자자자자 자자자 자자

Transcript of Unity cookbook 11

UNITY COOKBOOKSHOT BY. INS

PART 11자리야의 에너지 광선

Raycast 란 ?

Raycast 는 직역하면 ‘광선을 쏜다’라는 뜻입니다 . 구체적인 개념으로는 충돌체를 한 방향으로 나아가면서 일일히 체크하는 방식으로 결국엔 레이져 광선처럼 보이게됩니다 .이른바 ‘선형 보간 충돌’ 이라고 불리우는 녀석이죠 . Raycast 는 실제 게임 속에서 여러 방면으로 쓰이고 있습니다 .그럼 이제 ‘ Raycast’ 를 어떻게 쓰고 활용하는지 자세하게 알아보겠습니다 .

( 1 / 15 )

광선을 쏴보자 #1

우선 레이캐스트에 충돌시킬 4 가지 오브젝트가 필요합니다 . 입맛대로 배치해주시고 광선을 나가게 할 객체까지 준비합니다 .저는 앞서 광선을 쏠 객체를 ‘ Player’ 이라는 이름과 큐브 형태로 제작하였습니다 .‘Raycast’ 를 쓰려면 Physics 가 접두어로 붙고 인자로는 ‘출발 위치’ , ‘ 쏘는 방향‘ , ‘ 충돌 대상 정보‘ , ‘ 쏘는 거리‘ 순으로 받습니다 .실제로 레이캐스트가 보이진 않지만 ‘ Debug.DrawLine’ 을 이용하여 가상의 선을 그려 확인할 수 있습니다 .

( 1 / 15 )

광선을 쏴보자 #2

이전 코드에서 ‘ RaycastHit’ 자료형을 자세히 보겠습니다 .‘Raycast’ 를 쏴서 충돌 된 물체는 위와 같이 구체적인 정보를 얻어올 수 있습니다 . ‘ 법선‘ , ‘ 충돌 위치’ , ‘ 거리’ , ‘ 충돌체’ , ‘ 라이트 맵’ 등 여러 정보를 한꺼번에 기록하여 out 으로 다시 돌려주는 것이죠 .이후 게임을 실행하고 ‘ Scene View’ 에서 ‘ Player’ 객체를 직접 움직이면 충돌 감지를 확인할 수 있습니다 .

( 1 / 15 )

# 충돌되는 객체

광선을 쏴보자 #3

우리가 배운 것을 토대로 구체적으로 응용해보겠습니다 .카메라가 캐릭터를 공중에서 내려다 보는 시점은 쿼터뷰 (Quarter View) 에서의 캐릭터 이동은2 차원 상에서의 마우스 좌표를 3D 공간에서 입력받아 해당 공간으로 이동되는데 이 원리는 카메라 공간은‘View Frustum’ 공간에서의 2 차원 마우스 좌표를 입력받으면 , 변환 행렬을 통해 3 차원 공간의 위치로 바꿔버립니다 .이러한 변경 된 공간은 카메라 시점으로부터 목표지점까지의 벡터가 생성되어 충돌처리가 가능해집니다 .

( 1 / 15 )

CLICKMOVE!

view frustum

Vector

광선을 쏴보자 #4

Plane 를 하나 만들어 3D 상에서 마우스가 클릭되는 곳으로 이 객체를 움직여보겠습니다 .앞서 보셨다시피 ‘ ScreenPointToRay’ 라는 기능이 2 차원 마우스 입력을 3 차원 위치로 바꿔주는 역할을 수행합니다 .이후 ‘ hit.point’ 를 이용해 Raycast 를 발사하고 충돌 된 지점을 해당 ‘ Plane’ 를 이동시키는 코드를 볼 수 있습니다 .이러한 변환 과정의 맵핑 테크닉을 ‘ Picking’ 이라고 불리우기도 합니다 .

( 1 / 15 )

광선을 쏴보자 #5

완성 된 스크립트를 카메라에 ‘ Add Component’ 하고 앞서 만든 Plane 객체를 대입합니다 .이후 플레이를 해 보면 마우스 클릭에 따른 비콘이 이동하는 것을 볼 수 있습니다 .‘Game View’ 에서는 Raycast 의 광선을 확인할 수 없으므로 꼭 ‘ Scene View’ 에서 확인합시다 .

( 1 / 15 )

# 마우스 위치에 따라 이동하는 비콘

광선을 쏴보자 #6

마지막으로 한 층 더 심화하여 해당 비콘으로 캐릭터가 이동하고 애니메이션까지 수행하는 기능을 추가하겠습니다 .먼저 캐릭터 이동 스크립트를 제작해봅니다 . ‘ani’ 는 캐릭터를 받고 , ‘target’ 은 비콘을 받습니다 .캐릭터와 비콘의 거리를 조사하여 가깝지 않다면 이동 벡터를 구해 ‘ run’ 모션과 함께 이동합니다 .그와 동시에 캐릭터의 회전도 같이해야 하는데 y 축만 필요하기 때문에 오일러 각으로 변환 후 x 를 ‘ 0f’ 값으로 떼어버립니다 .

( 1 / 15 )

플레이어와 비콘과의 거리벡터정규화를 통한 이동벡터

이동벡터 방향으로 회전 뒤 각도 단위로 변환Y 축만 필요하기에 x 축은 0 으로

회전 보간 ( 인자 : 시작 회전지점 , 목표 회전지점 , 회전 속도 )

광선을 쏴보자 #7

이후 캐릭터에 해당 애니메이션과 비콘 지점을 할당하고 실행하게 되면 부드럽게 해당 지점으로 이동하는플레이어를 보실 수 있습니다 .이상 RayCast 의 사용법과 응용해 대해서 알아보았습니다 .

( 1 / 15 )

# 비콘에 따라 움직이는 캐릭터

Thank You !