작업을 실제로 시작한건 2일전 부터지만 흔적을 남겨두는게 좋을것 같아서 글을 쓰기 시작한다.

필자 또한 언리얼을 제대로 공부한적은 없고 수박 겉핥기 식으로 블루프린트를 통해서 무언가를 만들어본 경험이 조금 있다.


그러므로 이 글은 언리얼에 대한 지식이 아주 조금이라도 있는 사람을 기반으로 하게될것 같으니

너무 세세하게는 설명을 하지 않고 넘어가도록 하겠습니다.


일단은 명색이 프로그래머이니 C++을 통해서 만들어야 한다는 생각을 하게되었고

아무것도 모르는 상태에서 작업을 시작했다.


http://api.unrealengine.com/KOR/Programming/Tutorials/index.html

역시 엔진 공부에 가장 훌륭한 선생님은 공식문서나 도큐먼트다.

필자 역시 시작을 하기 위해서 메뉴얼을 통해서 C++로 어떻게 해야하는지에 대해 공부해가면서 작업을 했다.


성격상 차근차근 읽어서 다 따라하는건 힘들다 보니 지금 당장 구현하고 싶은 부분에 대해서

찾아서 공부한다음에 바로 작업에 들어갔는데

Pawn클래스를 상속받아서 CharacterBase라는 클래스를 만들고 그 기반하에

PlayerBase와 MonsterBase클래스를 만들생각이다.


언리얼을 조금 공부해보거나 알고 있는 사람들이라면 왜 Character클래스를 상속받아서 안만드는지 궁금할텐데

필자의 생각에 Character클래스 자체에 대해서 잘 모르기도 하고 불필요한 부분을 상속받아 만들필요는 없다는 판단이 섰기에 Pawn클래스를 상속받아서 필요한 부분을 채워서 하기로 결정했습니다.


어디까지나 개인적으로 직접 구현하는걸 좋아하기 때문이니 이글을 읽고 계신분들은

Character클래스를 상속받아서 만들어도 상관 없습니다.


C++ 클래스 만들기를 선택해서 Pawn클래스를 부모로 선택해 준다.

필자가 아까 말한것처럼 플레이어와 몬스터 클래스의 베이스가 되어줄 CharacterBase 클래스를 만든다.


생성하고 나면 뭐부터 해야할지 막막한 텅빈 클래스가 등장하는데 당황하지 않으셔도 됩니다.

프로그래머라면 너무 익숙한 상황이니까 침착하게 필요한것들을 생각해봅시다.


이 캐릭터베이스 클래스는 플레이어와 몬스터에서 상속받아서 사용할 것이니까

메시 컴포넌트가 필요할것이고 기본적인 충돌처리를 위한 충돌체

지금 당장 생각나는건 이 두가지 정도가 다이기 때문에 추가를 해줍니다.


당장 위에서는 두가지만을 추가하자 했지만 일단은 4가지를 전방선언해줍니다.

이유는 바로 아래에서 설명을 할테니까 묻지도말고 따지지도 말고 하시면 될것입니다.


튜토리얼에는 UPROPERTY에 대한 내용이 없지만 에디터 상에서 값에 접근하고 조절하려면 위와 같이 설정을 해주어야 합니다.

사실 필자또한 마지막에 있는 'meta = 어쩌구' 부분에 대해서는 잘 모르지만 궁금하신 분들을 위해서 간략히 설명해 드리자면

언리얼 C++에는 언리얼의 독자적인 리플렉션 시스템이 있기때문에 저러한 지정을 해주어서 에디터상에서 사용할

변수나 함수, 클래스 등을 읽어들일수 있게 해주는 방식입니다.


더 자세하게 알고 싶으시다면 공식문서의 'C++프로그래밍 입문'항목의 '언리얼 리플렉션 시스템' 부분을 읽어보시면 자세히 알 수 있습니다.

하단링크는 공식문서의 링크이며 해당 부분을 읽어보시면 언리얼 블로그에 올라와 있는 리플렉션 설명글 링크가 있으니

거길 통해서 더 많이 알아보실수 있습니다.

http://api.unrealengine.com/KOR/Programming/Introduction/index.html


위 사진을 보시면 RootComponent에 SceneComponent를 할당해 주었는데 필자도 정확히는 모르겠지만

SkeletalMeshComponent를 Root에 바로 할당하면 에디터 상에서 크기조절을 제외한 회전이나 위치조절이 불가능했다.

그래서 에디터에서 Pawn클래스 블루프린터를 만들어 확인해 보니

RootComponent에는 SceneComponent가 붙어있길래 그걸 따라서 지정해 준것이다.


저 ArrowComponent의 경우에는 에디터상에서 정면을 알려주는 용도로 사용이 되는데

언리얼 기본 클래스인 ACharacter클래스에서 보고 그대로 가져왔기 때문에 별로 설명할건 없다.


이제 작성한 코드를 빌드시키면 언리얼 에디터에서 자동적으로 리플렉션을 통해 업데이트를 해주고

CharacterBase클래스를 기반으로 블루프린트를 만들어 Mesh에 기본적인 마네킹을 넣어주면

위와같은 화면을 볼수가 있게된다.


아까 작성한 코드대로 SceneComponent가 RootComponent가 되고 그 밑에 SkeletalMeshComponent

그 밑에는 CapsuleComponent가 붙는다. ArrowComponent는 정면을 알려주는 용도이기 때문에

에디터를 벗어나면 보이지 않으니 걱정하지 않아도 된다.


글재주가 없어서 인지 내용은 별것도 없는데 쓰는시간만 오래걸렸다.

기본적인 캐릭터 베이스는 완성이 되었으니 필요한 부분은 나중에 추가를 하기로 하고

이글은 여기서 마무리를 짖도록 한다.

Posted by 별수집가
,