이 게시물은 다음 게시물에서 이어서 진행한다.

https://gamdekong.tistory.com/201

 

Character 클래스를 이용하여 이동 구현 및 카메라 구현(FPS모드, 3인칭 모드 스위칭)

먼저 Character class 를 부모로 하여 c++파일을 생성한다. 생성후 다음과 같이 소스코드를 수정한다. 코드를 빌드한후, 상속받아서 블루프린트를 만든다. 그후, 블루프린트를 실행시키면 다음과 같

gamdekong.tistory.com

 

먼저 AnimInstance를 상속받아 c++ 파일을 생성한다.

에니메이션 트렌지션을 위해서 다음과 같이 AnimInstance 코드를 작성한다.

 

빌드후, Idle과 Walk 에니메이션을 플레이 하기위해

BlendSpace 1D를 이용한다. 다음과 같이 만든다.

생성후 실행하여 다음과 같이 설정해 준다.

위와 같이 설정하면,

속도가 0일때와 300일때를 블랜드 할 수있다.

초록색 점을 이동시키면 확인할 수 있다.

 

 

그후, 만든 AnimInstance를 상속받아 다음과 같이 에니메이션 블루 프린트를 생성한다.

블루프린트를 생성후 에니메이션 블루프린트 창을 연다.

그후, 새로운 스테이트 머신을 생성한다.

스테이트 머신을 적당한 이름으로 변경후 더블클릭 하여 들어간다.

 

AddState를 이용하여 다음과 같이 노드를 생성한다.

Idle/Walk를 더블클릭하여 들어간후, 만들어 놓은 IdleWalk Blend를 사용한다.

그리고 MovementSpeed 변수를 연결 시켜 준다.

그후, 다음과 같이 state를 더 만들어 준다.

각 스테이트에 들어가서 그에 맞는 에니메이션을 연결 시켜준다.

 

이젠 각 스테이트를 변경하기위한 트랜지션을 설정해준다.

 

마지막으로 스테이트 머신을 연결한다.

 

그후, 이벤트 그래프에서

다음과 같이 작성한 update 함수를 연결한다.

 

설정한 에니메이션을 캐릭터에 적용시킨다.

이후 게임을 실행해보면 움직일때 에니메이션 상태가 변화하는것을 볼 수 있다.

 

다음은 점프를 구현하기 위한 작업이다.

우선 Jump키를 등록한다.

Character 코드를 다음과 같이 추가한다.

빌드후 게임을 플레이하면 점프와 에니메이션작동을 볼 수 있다.

 

먼저 Character class 를 부모로 하여 c++파일을 생성한다.

생성후 다음과 같이 소스코드를 수정한다.

코드를 빌드한후, 상속받아서 블루프린트를 만든다.

그후, 블루프린트를 실행시키면 다음과 같이 추가된것을 볼 수 있다.

이젠, 생성한 캐릭터를 사용하기 위해 다음과 같이 작업한다.

 

게임 모드 베이스를 상속하여 게임모드 블루프린트를 생성한다.

생성후 블루프린트를 다음과 같이 수정한다.

 

프로젝트 세팅에 들어가서 다음과 같이 수정한다. 맵은 원하는대로 저장후 설정한다.

이제 게임을 실행해보면 내가 만든 캐릭터가 생성되는 것을 볼 수 있다.

이젠 캐릭터 매쉬에 에셋을 적용해보자.

언리얼 마켓을 들어가면 공짜 캐릭터 에셋들이 많이 있다. 아무거나 받아서 적용해 보자.

필자는 기본 마네킹 에셋을 사용하였다.

 

 

 

이젠 캐릭터를 움직일 수 있도록 다음과 같이 키 이벤트를 등록후,  캐릭터 소스코드를 수정한다.

 

프로젝트 세팅 -> input (입력) 에서 다음과 같이 추가한다.

소스코드를 다음과 같이 수정한다.

빌드후 게임을 실행해보면 캐릭터가 움직고 카메라를 이동 시킬 수 있다.

 

마지막으로 카메라를 FPS모드로 변경하기 위해서 다음과같이 추가한다.

 

키를 추가한다.

코드를 추가한다.

 

빌드후 실행해 V키를 누르면 FPS 모드로 변경 할 수 있다.

 

 

BP용으로 FPS를 생성한다.

Widget blueprint로 MainMenuWidget을 생성한다.

Background Image 구현.

anchors를 다음과 같이 설정하여 전체화면에 채운다.

원하는 이미지로 다음과 같이 설정한다.

타이틀을 넣기위해 text를 다음과 같이 생성한다.

다음과 같이 엥커를 설정한다.

버튼을 넣을 버티컬 패널을 먼저 생성한다.

다음과 같이 버튼2개를 생성해서 패널안에 생성한다.

텍스트 위젯도 버튼안에 넣어 생성한다.

각 버튼 padding을 다음과 같이 준다.

버튼의 텍스트를 다음과 같이 변경한다.

이젠 Play 버튼을 눌렀을때 게임을 실행하도록 다음과 같이 한다.

 

그래프를 누른후 다음과 같이 누른다.

 

이제 실행이 되는지 확인하기 위해

새로운 Empty레벨을 생성한다.

생성후 레벨을 더블클릭해서 Empty레벨을 띄운다.

그후, Widget을 생성하기 위해 다음과 같이 설정한다.

위와 같이 블루프린트 작업후 레벨로 돌아가 다음과 같이 게임모드를 변경한다.

그후 플레이 버튼을 누르면 다음과 같이 메인메뉴 화면이 나타난다.

 

하지만 마우스가 보이지 않는다.

다음과 같이 레벨 블루프린트를 설정한다.

컴파일후 게임을 실행하면.

마우스가 보이고 버튼을 클릭할 수 있다.

 

 

이젠 나머지 Quit 버튼도 블루프린트를 작성한다.

이젠 버튼을 누르면 게임이 종료 된다.

 

하지만 Play 버튼을 눌러 게임을 을 실행하면 더이상 캐릭터가 움직이지 않는다.

Ui Input 모드를 다시 변경해 주어야 한다.

다음과 같이 블루프린트 작성을 한다.

 

이젠 게임화면으로 넘어가면 캐릭터를 움직일 수 있다.

 

마지막으로 게임시작이 메인 메뉴에서 실행하도록 다음과 같이 설정을 변경한다.

 

이젠 캐릭터 HUD를 만들어보자

우선, 캐릭터의 총알수를 다음과 같이 10개로 제한한다.

 

캐릭터 블루프린터를 연다.

다음과 같이 변수를 생성한다.

그후 총알수를 제한하기 위해, 기존 InputActionFire 이벤트에 다음과 같이 중간에 추가한다.

총알을 발살할때마다 1씩 줄인다.

그후 플레이를 하면 10발만 사용가능하다.

 

이젠 AmmoLeft를 HUD에 연결하여 남은 총알갯수를 볼 수 있도록 하자.

 

PlayerHudWidget을 다음과 같이 만든다.

실행하여, 다음과 같이 위젯을 더한다.

 

 

다음과 같이 텍스트를 넣는다.

IsVariable을 채크하면 해당 텍스트를 변수로 참조가능하다.

 

이젠, 해당 HUD를 화면에 붙여보자

 

 

 

FirstPersonCharacter Blueprint를 연다.

다음과 같이 BeginPlay수정한다.

Promote to variable을 선택하면 다음과 같이 변수로 레퍼런스가 저장된다.

 

 

이젠 실행해보면 다음과 같이 보인다.

 

이젠 총알을 발사 할때마다 갯수를 줄여보자.

 

PlayerHUDWidget에 다음과 같이 함수를 추가한다.

이젠 이 함수를 캐릭터에서 총알을 발살할때마다 불러준다.

InputActionFire에 다음과 같이 추가한다.

 

이젠 플레이해보면 총알이 발사될때마다 갯수가 주는것을 볼 수 있다.

 

또한 Widget의 bind라는 기능을 사용 할 수 있지만, 매 틱마다 부르기 때문에 비용면에서 좋지 않다고한다.

 

 

다음은 Pause 화면을 구현해보자.

 

우선, Pause Widget을 생성한다.

 

다음과 같이 UI를 만든다.

BackgroundBlur는 일반적으로 우리가 생각하는 blur 처리이다.

 

이젠 Resume과 Quit 버튼의 OnClick을 다음과 같이 구현한다.

 

 

이젠 P키를 누르면 Pause화면이 생성되도록 만들어 보자.

 

FirstPersonCharacter Blueprint에 다음과 같이 추가한다.

컴파일후 플레이를 하면 P를 누르면 다음과 같이 Pause화면이 보인다.

 

+ Recent posts