Unreal Engine & C++ Tutorial - 1st Person Shooter Game
https://www.youtube.com/watch?v=4HoJIgyclZ4
이전글에서 한 것은
위와 같이 캐릭터 capsule컴포넌트에 카메라부터 손, 총 등등의 컴포넌트들을 추가한 것이었다. 위는 그냥 예제
그 중에서 가장 이해가 안되었던 코드로, 왜 다른 컴포넌트와 다르게
해당 함수로 GunMesh를 HandMesh에 종속시켰을까가 궁금했는데,
Rule을 적용하기 위해서였고, HandMesh의 크기에 상관없이
해당 GunMesh는 항상 똑같은 Scale을 유지하게 된다.
만든 사용자 정의 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가 단 한개이다.
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