저번 포스팅에서 플레이어나 몬스터의 베이스가 될 클래스에
기본적으로 필요할법한 것들을 넣어줬습니다.
이번에는 공통적으로 가지고 있을법한 데이터를 구조체로 선언해서 관리할 생각입니다.
지금 당장은 대충 느낌만 살리기 위해서 이것저것 넣어두고 이번에 실제로 사용할 정보는 MoveSpeed 저거 딱 하나입니다. 나머지는 왜 있냐고 물어보신다면 있는게 그럴싸해보여서 라고 답할수 있겠네요
해당하는 구조체를 변수로 선언 및 초기화를 간단하게 해주시면 됩니다.
필요없는 정보지만 참고로 저는 MoveSpeed에 200을 줬습니다.
이제 플레이어를 위한 클래스를 만들시간이 되었군요, CharacterBase클래스를 상속받아서 PlayerBase라는 클래스를 하나 만들어 줍니다.
선생님 저희는 무엇을 해야하죠?
또다시 돌아온 텅빈 클래스입니다. 이번에는 저번보다 더 심하네요
마찬가지로 당황하지 않고 침착하게 할것을 하나하나 생각해봅니다.
이동관련 처리를 해줄 MovementComponent가 필요할것이고 키입력을 지정해주어야 합니다.
또 플레이어의 눈이 되어줄 CameraComponent는 필수적인부분이 되겠네요
대충 견적이 나온듯 하니까 문서를 보면서 잘 따라가봅니다.
가장먼저 손쉽게 할수있는 프로젝트 세팅의 입력을 위와같이 처리해줍니다.
일단은 위와같이 함수 6개를 먼저 선언해 줍니다. 오버라이딩되어 있는 두 함수는 조금있다가 천천히 등장할 예정이니 아 이런게 있구나 생각만 하고 계시면 됩니다.
보시는바와 같이 SetupPlayerInputComponent함수는 방금전 프로젝트세팅의 입력에서 설정한 키의 이름에 맞는 입력값에 작동할 함수를 연결해줄때 쓰게됩니다. 4개의 이동 및 시점변경 함수에 대해서는 별도의 설명이 없어도 될것 같기는 하지만 일단 필자의 경우 시점변경 함수에 45라고 하드코딩이 되어있는데 테스트를 위해서 해둔것이니 이 글을 보시는 분들은 별도의 변수를 통해서 조절할수 있도록 바꿔주시는게 좋을것 같습니다.
다음으로는 입력을 통한 이동을 처리해줄 MovementComponent의 생성인데 튜토리얼을 따라 PawnMovementComponent를 상속받아서 PlayerMovement라는 클래스를 생성합니다.
상속받은 클래스에는 아무것도 없는데 TickComponent함수를 오버라이딩해서 위와같이 작업해주시면 됩니다.
위 함수는 Tick함수라고 대충 알아두시면 됩니다. 사실 저도 그렇게만 알기 떄문에 더 알려드릴수가 없어서 그런건 비밀아닌 비밀이죠, 코드중에 보시면 Velocity 변수에 이동벡터를 집어넣는게 보이실텐데 나중에 애니메이션 블루프린트에서 걷기와 서있는 모션을 변경할때 사용할 예정입니다.
다시금 PlayerBase 클래스로 돌아와서 헤더에다가 이렇게 먼저 선언을 해주시면 됩니다. 전방선언은 센스있게 하셨으리라 믿습니다.
이번에 테스트를 하면서 확인한게 있는데 뒤에있는 meta = (AllowPrivateAccess = "true")
이 부분은 읽는것과 마찬가지로 private영역에 있는 변수를 언리얼에디터에서 접근할수 있도록 해주는 그런 역할을 가지고 있었습니다. 이미 알고 계셨다면 뒷북은 이해해주시길 바랍니다.
위와같이 두 컴포넌트를 생성해 주시고 그릇에 물을 받아온다음 컴퓨터 앞에두고서 기도를 하면서 빌드를 한번 해봅시다. 문제없이 빌드가 되었다면 축하드리고 아니라면 저는 죄가 없습니다 판사님
아무튼 다시 돌아와서 PlayerBase클래스를 기반으로 블루프린트를 만들어서 마네킹을 넣어주시고 게임모드의 Default Pawn Class에 적용시키신 다음에 실행을 해보시면 터질수도있고 안터질수도 있습니다.
그리고 기분좋게 손수만든 캐릭터를 움직여 보신다면?
마치 익숙한 어느분처럼 허공답보 아니.. 지금은 애니메이션조차 없으니 공중부양을 하게되는 캐릭터를 보실수 있게 될텐데 너무 당황하시면 안돼고 침착하게 숨을 고르시면 됩니다.
기본적으로 아까 상속받아 만든 PlayerMovement 클래스는 중력 적용이 안되는데요 이건 기본적으로 원래 그런것이다 보니까 어쩔수 없습니다. 추후에 직접 중력을 적용시키는 코드를 작성해서 넣는 방법밖에 없어요. 그래서 이건 나중으로 미뤄두고 애니메이션을 먼저 해보겠습니다.
우선적으로 애니메이션 블루프린트를 하나 만들고 그래프에다가 스테이트머신을 하나 만들어줍니다.
왜 애니메이션은 블루프린트로 하는지 궁금하신 분이 있으실거 같은데 제가 애니메이션 부분은 잘 모르기도 하고 C++로 작업하려니까 마땅한 참고자료가 없어서 블루프린트의 힘을 빌리기로 했습니다.
스테이트 머신을 더블클릭하여 안으로 들어오신다음에 기본적으로 있을 Idel애니메이션과 이동할때 바꿔줄 Walk애니메이션을 올려주시면 됩니다. 저 애니메이션 두개의 출처는 다들 아시리라 믿고있지만 언리얼에서 기본제공해주는 3인칭 게임 프로젝트를 만들어 보시면 안에 있으니 쏙쏙 빼서 가져오시면 됩니다.
그리고는 Idel에서 Walk로 갈때와 Walk에서 Idel로 갈때의 조건을 깔끔하게 작성해 주시면 됩니다.
어떻게 하냐구요? 위에있는 사진처럼 해주시면 됩니다.
아까 PlayerMovement클래스에서 오버라이딩한 TickComponent함수에 Velocity값에 계속 대입을 해주고 있었는데 이곳에서 사용하기 위해서 였습니다. Velocity값이 0보다 크면 움직이는 중인것이고 0과 같으면 멈춰있는것인 것이죠!
그리고 보시면 경고메시지가 생기게 되는데 저도 정확한 원인과 해결방법을 몰라서 그냥 내버려 두고있습니다. 혹시 아시는분이 있다면 알려주세요!
이렇게 고생고생(?)해서 만든 애니메이션을 적용시켜준다음에 움직여 보신다면
여전히 공중부양을 하고있기는 하지만 허공답보로 진화한 캐릭터를 보실수 있습니다.
이번에도 여전히 별로 쓴것도 없는데 시간은 너무 빨리 흘러버리고 저의 체력도 떨어졌군요.
이번 포스팅은 여기에서 마무리하고 근시일내로 돌아올수 있도록 하겠습니다.
혹시 뭔가 잘 안되거나 하시는분들은 댓글로 알려주신다면 확인했을때 답글 달아드리겠습니다.
'프로그래밍 > 언리얼' 카테고리의 다른 글
언리얼로 만들어보는 RPG - 캐릭터 구현(6) (0) | 2019.01.10 |
---|---|
언리얼로 만들어보는 RPG - 캐릭터 구현(5) (0) | 2019.01.09 |
언리얼로 만들어보는 RPG - 캐릭터 구현(4) (0) | 2019.01.06 |
언리얼로 만들어보는 RPG - 캐릭터 구현(3) (0) | 2019.01.02 |
언리얼로 만들어보는 RPG - 캐릭터 구현(1) (0) | 2018.12.26 |