UE5FPS(2) - Movement

JUSTICE_DER·2023년 3월 3일
0

🌵UNREAL

목록 보기
22/42
post-thumbnail

Unreal Engine & C++ Tutorial - 1st Person Shooter Game
https://www.youtube.com/watch?v=4HoJIgyclZ4

이전글에서 한 것은

위와 같이 캐릭터 capsule컴포넌트에 카메라부터 손, 총 등등의 컴포넌트들을 추가한 것이었다. 위는 그냥 예제

그 중에서 가장 이해가 안되었던 코드로, 왜 다른 컴포넌트와 다르게
해당 함수로 GunMesh를 HandMesh에 종속시켰을까가 궁금했는데,
Rule을 적용하기 위해서였고, HandMesh의 크기에 상관없이
해당 GunMesh는 항상 똑같은 Scale을 유지하게 된다.


BP Character 생성

  • 만든 사용자 정의 Character클래스를 BP로 추가한다.

  • 여태 했던 생성자에서의 종속 작업들이,

아래처럼 구성되어 생성이 되는 것이 보인다.
주의해서 볼 것은, 아직 BeginPlay를 하지 않았기 때문에,
HandMesh에 GunMesh가 종속되지 않았다.

  • HandMesh에 기본스타터패키지에 있던 캐릭터 팔에셋을 적용시키고,
    Animation도 기본 FirstPerson Animation을 적용시킨다.

  • 총도 기본 asset으로 추가한다. 애니메이션 설정은 안함.
    일단 손에 총이 붙어있지 않은 상태이다.

  • 그리고 CPP로 게임모드를 하나 만든다.

그리고 블루프린트 클래스로 해당 Class를 만든다.

  • 게임모드가 자동적으로 C++게임모드로 설정이 되어있는데,
    이걸 블루프린트로 굳이 바꾼다.
    블루프린트가 더 간편하기 때문에 해당 클래스를 상속받은 BP클래스를 게임모드로 사용하는 이유일것 같다.

  • 그리고, Default Pawn도 BP_FPSCharacter로 바꾸는데,
    GameMode와 똑같이,

C++로 클래스를 만든 것을,
상속받는 BP 클래스로 만든 것을,
Project Setting으로 둔다.


오류

  • 문제가 생겼다.
    분명 프로젝트 세팅으로는 내가 만든 캐릭터가 생성이 되어야하는데,
    기본제공 캐릭터가 생성이 된다.

  • 프로젝트 세팅이 적용 안되어서 이것저것 눌러보다가 해결했다.
    방법은, 화살표를 누르는 것이다.
    Use Selected Asset... 버튼을 누르면 모든 설정이 불러와지고,
    다음처럼 내가 만든 세팅대로 캐릭터가 보이게 된다.

  • 그리고 여기서 TEXT가 단순히 변수명을 짓는건줄 알았는데, 아니었다.

  • 아래의 경우는 그냥 이름짓는 것이지만, 위의 경우는
    해당 HandMesh의, 특정 소켓의 이름을 의미한다.
    그래서 총이 손에 딱 붙게 된다.

  • 해당 HandMesh의 Asset을 아래로 설정했었고,
    해당 Skeletal Asset에는 소켓이 여러개인데, 그 중 GripPoint라는 소켓이 존재한다.
    웃긴건 오른손잡이가 고정인지 GripPoint가 단 한개이다.

  • 분명 같은 이름의 애니메이션을 HandMesh에 넣었지만, 버전의 차이인 듯 하다.

Movement

  • Project Setting에서 다음과 같이 입력키에 대한 값의 바인딩을 하였다.
    Jump

  • 그리고 캐릭터에서 실제로 사용해본다.

  • Jump라는 함수는 ACharacter의 멤버함수이고, 매개변수를 &로 전달하는 이유는, 함수 포인터로 값을 받아야하기 때문인듯하다.

  • 아래와 같이 사용한다. 세부적으로 알고 싶지만, 설명해주는 검색결과가 하나도 없다.
    내가 이해한대로 이해하고 일단 넘어간다.

  • 아래처럼 직접 액션바인딩을 만들어서 인자로 줄 수 있지만, 그냥 Proj Setting에서 설정하는 것이 빠를 것이다.
    해당 액션의 이름과, 액션에 해당하는 키가 입력되는지를 AB로 바인딩한다.
    최종적으로 Binding이라는 것이 리턴된다.

  • 그렇게 바인딩한 것들.
    Fire는 기존에 존재하는 OnFire라는 자신클래스의 멤버함수에 매핑하였다.

  • OnFire라는 함수가 원래 있던건지 모르겠어서 테스트 캐릭터 클래스를 추가해보았다.
    없다.

  • 해당 기능들은 언제 추가된 것일까?...
    Action의 이름도 예약어처럼 특별취급하여 Jump는 OnJump로 추가되지 않았는데 Fire만 추가된 것일까?
  • 일단 사용해보았다.

  • 그리곤 하나하나 직접 작성한다.

  • 이제서야 미리 설정해둔 값이 사용된다.

  • 잘 움직이는 것을 볼 수 있다.

  • 그리고 웬만하면 아래의 이름 그대로 사용하는 것이 좋겠다.
    MoveF라고만 써두었는데, 앞으로 이동하지 않던 실수해결

  • 만들면서 느낀 것은 이전의 BP방식으로 구현하는 것이 더 직관적이었고,
    굳이 C++로 구현할 필요가 있을까라는 것이었다.


참고사이트

Movement 액션 프로그래밍 및 바인딩
https://wergia.tistory.com/127

profile
Time Waits for No One

0개의 댓글