[UE4 - 강의] LineTrace - 1

in #kr-lecture7 years ago (edited)

LineTrace - 1

안녕하세요~ @burning 입니다.
제가 공부하면서 익혔던 언리얼 기능 및 기술(?)들을 남기려고 합니다.
메모라고 할 수도 있겠네요 ㅎㅎ
그 첫번째 강의는 LineTrace 입니다.

RPG가 아닌 FPS게임은 마우스 기반으로 뭔가 이벤트를 하지 않아요.
'음? FPS도 마우스로 조작하는게 아닌가?' 라는 생각을 하실텐데요.

무슨 말인가 하면 RPG처럼 마우스 '좌표'를 기반으로 어떤 이벤트를 처리 하지 않는다는 것이죠.
마우스를 움직일 때 움직이는 거리값을 가지고 카메라를 회전 시키는 겁니다.
RPG같은 경우는 마우스를 갔다 대면 되지만 FPS는 크로스헤어로 무언가를 합니다.

FPS 게임들을 보면 크로스헤어를 기반으로 무언가 이벤트가 일어나잖아요?
내가 선택하려는 부분의 물체가 빛이 난다던가 하는 것처럼요.

이걸 구현 하기위해 LineTrace(Raycast)라는 기능을 사용하는데요.
크로스헤어를 기준으로 정면을 향해 직선으로 쏴주는 겁니다.
그리고는 그 직선에 걸리는(충돌하는) 물체가 뭔지 확인하는 거죠.

레이져 포인터를 쫙 쏴준다고 생각하시면 됩니다.
이해가 되시지요? 그럼 화면 중심으로 레이져를 쏴보는 블루 프린트를 작성해 보겠습니다.

기본적인 셋팅을 해봅시다.
먼저 FPS처럼 움직이게 만들어 보죠!
3가지가 필요 하겠습니다. 게임모드, 캐릭터, 컨트롤러
linetrace01

게임 모드에 들어가서 케릭터와 컨트롤러를 방금 만들걸로 지정해줍니다.
그리고 셋팅->월드셋팅에 들어와서 게임모드를 MyGameMode로 지정해줍니다.
또, 프로젝트 셋팅-> 입력에 들어가서 마우스 입력을 넣어 줍시다.

linetrace02

그리고 MyController의 이벤트 그래프에 가서 입력 이벤트를 불러 연결해 줍니다.

다음으로 MyCharacter를 더블 클릭해서 Controller Pitch 부분을 체크 해줍니다.
이걸 안해주면 케릭터가 위아래로 움직이지 않습니다.

자, 이렇게 해주고 플레이를 해주면 FPS모드와 같이 움직입니다.
자 이제...LineTrace를 해볼까요? 레이져를 쏴주 작업을 하는 겁니다.
MyCharacter를 더블 클릭해서 카메라 컴포넌트를 추가 해줍시다.

카메라 위치는 사람 눈 높이에 맞게 또는 자신의 게임에 맞게 조정해주세요.
그리고 이벤트 그래프로 가서 LineTrace를 검색해 봅니다.
LineTrace 노드 종류는 By Chanel과 For Object가 있습니다.
Multy는 지금 필요 없으니 빼겠습니다.
두 종류의 차이는 월드의 오브젝트 중심으로 Trace를 할 건지 채널 중심으로 할건지에 대한 겁니다.
우리는 오브젝트 중심으로 할테니 For Object를 쓰겠습니다.

노드를 보면 이런데요. Trace를 하기 위해서는 트레이스의 시작과 끝나는 점을 잡아 줘야 합니다.
트레이스의 시작을 생각해보면 어딜까요???
바로 카메라의 중심, 위치 입니다.
Start에 뭘 넣을지 감이 잡이시지요?
그럼 바로 실행에 옮겨 볼게요! Get world Location이라는 노드를 불러옵니다.
카메라의 로케이션을 바로 불러오는 노드도 검색이 될겁니다. 그렇게 해줘도 되고, 기본 노드를 가져와 레퍼런스를 달아 줘도 됩니다.

저는 레퍼런스를 달아 주는 쪽으로 했습니다.
자, 시작 점을 알았습니다. 그럼 다음은 이걸 어디까지 어디뱡항으로 뻗어 나가게 해줄 것인가!? 이게 중요하죠.
방향은? 카메라가 보고 있는 방향으로 한 50Cm만 쏴볼까요?
카메라의 Forword Vecter를 가져옵니다. 이노드는 단위벡터를 가져오는 것이기때문에 길이가 1입니다.
그래서 값을 50 곱합니다. 언리얼에서는 1Unit이 1Cm이니까요. 그럼 레이가 쭉 50Cm까지 뻗어 갈겁니다.
또한 이값은 단위벡터이기 때문에 공간이 맞이 않습니다. 즉, 위치가 맞지 않다는거죠.
그래서 카메라의 Location을 더 해줍니다. 그리고 End에 연결!
또한 매 틱마다 Trace를 해줘야 하기때문에 Tick이벤트에 연결해 줍니다.
그리고 Hit하는 오브젝트 타입을 정해줘야 합니다. 노드를 끌어가 때면 배열 만들기가 있습니다.
배열을 만들어 WorldStatic으로 변경해줍니다.
그리고 하나 더 Draw Debug Type을 For One Frame으로 정해 줍니다. 이걸 설정해주면 레이져를 그려 줍니다.

완성! 한번 플레이 해볼까요?

아무것도 안보이죠?? F8를 눌러서 케릭터에서 탈출을 해보면...!

레이져가 쏴진걸 확인 할 수 있습니다.
일일이 탈출하기 귀찮으니까, Trace길이를 길게 해줍시다.
한, 5m를 해줄까요?
길이 변화는?? 아까 End 입력에서 벡터값을 곱해준걸 500으로 곱해주면 됩니다.
이렇게 해주면...! 화면의 변화가 생깁니다. 가운데 빨간 점이 보이게 되는데요.
레이져가 점찍힌 물체를 Hit했다는 겁니다. 즉, 5m안에 있다는 거죠.
여기까지 레이져를 만들어 봤구요.

다음 강의에서 trace를 가지고 히트되는 물체를 확인해보는 기능을 추가 해볼게요.

Sort:  

Congratulations @burning! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63834.78
ETH 2627.38
USDT 1.00
SBD 2.78