티스토리 뷰

개요


언리얼 엔진으로 프로젝트를 생성하면 다양한 종류의 프로젝트를 쉽게 시작할 수 있도록 시작 프로젝트를 지원한다.


이번 포스팅에서는 퍼즐 시작프로젝트를 생성하고 내용을 보면서 공부해보자.






구성 요소


프로젝트를 생성하면 화면에 기본적으로 놓여있는 actor들이 어떤 것들이 있는지 알아보자. Lighting과 RenderFX는 이 프로젝트와 직접적인 관계가 없는 actor들이므로 생략.


Camera

게임 화면을 촬영하는 카메라. 퍼즐 보드를 바라보고 있다.

CubeMesh

바닥을 표현하는 static mesh actor

PuzzleBlockGrid

기본 블럭들을 생성하고, 스코어를 나타내는 text render component가 포함된 actor

TemplateLabel

UI용 text render actor

SkySphare

배경을 표현하는 actor. 공교롭게도 이 시작프로젝트에서는 배경의 모습을 볼 수 없다.




실행 모습


바로 프로젝트를 실행해보면 정육면체 9개가 화면에 보이고 각 정육면체는 마우스 입력에 따라 3가지 상태로 바뀐다.

  • 기본             : 파란색 material

  • 마우스 오버 : 흰색 material

  • 마우스 클릭 : 노란색 material

또 블록을 클릭하면 score 값이 1씩 증가하는 것을 볼 수 있다.




프로젝트 설정


프로젝트 설정에서 입력 탭에 가보면 VR기기의 입력을 위해서 미리 매핑이 되어있는 것을 볼 수 있다.




C++ 코드


프로젝트를 생성하면 아래 그림처럼 코드들이 미리 작성되어있는 것을 볼 수 있다. 실행시켰을 때 봤던 블록들을 생성하고 마우스 입력을 처리해서 블록의 상태를 변경시키는 코드 등이 기본적으로 C++ 코드로 생성된 것이다.


GameMode

게임 모드를 설정하는 클래스. 전체 게임의 initializer라고 볼 수 있다.

pawn 세팅

게임에 유저의 입력을 받을 수 있는 pawn은 필수요소 이므로 pawn의 static class를 기본 pawn으로 설정한다.

player controller 세팅

입력을 담당하는 controller class를 설정한다. 이로써 키보드 입력으로 게임을 할지, 마우스로 할지, 스마트폰 터치 화면으로 할지 커스터마이징 할 수 있다.



Pawn

게임에서 유저의 입력을 받고 처리하는 개체로 보통은 possess하여 입력에 따라 transform을 변경하는 등 유저가 조작할 수 있는 actor지만, 퍼즐 프로젝트에서는 유저가 마우스 입력만 할 뿐 어떤 actor를 조종할 필요가 없기 때문에 pawn은 마우스 입력을 받아서 다른 처리를 한다.


Tick

매 프레임 호출되는 함수

SetupPlayerInput

Component

유저의 입력을 함수로 매핑시켜주는 역할을 하는 함수

CalcCamera

매 프레임 카메라의 위치와 방향을 설정할 수 있도록 호출되는 함수



OnResetVR

VR 기기를 사용할 때 설정하기 위해 만든 함수

VR은 다루지 않기 때문에 생략한다.

TriggerClick

마우스 왼쪽 버튼 클릭을 매핑시킬 함수

TraceForBlock

Tick에서 매번 호출하는 함수

현재 마우스 포인터의 위치와 가리키는 방향의 끝점을 vector로 받아서 block들을 picking 하고 있는지 검사한다.



CurrentBlock

Focus

현재 가리키고있는 블록 포인터. blueprint에서 접근할 수 있도록 설정되긴 했지만 실제로 접근하는 부분은 현재 없다.





Cast<T>

엔진에서 제공하는 type cast 문법

VR 기기 검사

매 프레임 호출되는 Tick 함수에서 매번 기기 검사를 한다는 것은 게임 도중 VR기기를 연결해도 자연스럽게 동작할 수 있도록 하기 위한 것으로 보인다.

마우스 좌표

player controller에 내장된 함수로 마우스의 시작 좌표와 3d 좌표계에서 가리키는 방향을 얻을 수 있다.

이 방향으로 충돌검사를 할 lazer(시작점과 끝점이 있는 선)를 만들고 TraceForBlock으로 연산을 위임한다.



VR 매핑

생략



카메라 회전 업데이트

매 프레임 카메라의 회전을 업데이트 시키는 부분인데 현재로서는 카메라의 회전을 게임 도중에 바꿀 수 있는 방법이 없기 때문에 이 부분을 주석처리해도 변화는 없다.



이벤트 전달

VR기기로 가리키고 있던 블록에게 클릭되었음을 알려주고 적절한 처리를 할 수 있도록 HandleClicked()를 호출해준다.



충돌 검사

HitResult

충돌의 결과 뿐 아니라 충돌한 객체에 대한 포인터도 저장할 수 있는 구조체


Actor.IsValid()

가비지 콜렉팅을 하는 엔진 특성상 해당 인스턴스가 유효한 인스턴스인지 검사하는 함수인 것 같다.


Actor.Get()

마찬가지고 가비지 콜렉팅을 위해 레퍼런스 카운팅을 하고있는데, 이 레퍼런스 카운팅을 증가시키지 않고 포인터 정보를 얻어오기 위해 weak pointer를 얻는 함수

선택 전달

선택된 블록의 Highlight() 함수를 호출해서 상태를 변경할 수 있도록 한다.



PlayerController

마우스 입력을 받을 수 있도록 초기값을 설정하고 마우스 커서모양을 cross hair로 변경한다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함