강의의 내용을 스크린샷하는것은 저작권에 위배되기 때문에,
강의를 통해서 배운 것, 내가 작성한 코드, 그래프 위주로만 작성한다.
먼저 프로젝트를 통해서 배울 수 있는 것은 다음과 같다.
이 중에서 내가 가장 알고 싶은 내용은,
PlayerCharacter의 움직임과 애니메이션을 어떻게 구현하는 것이
효율적일지에 그 정석에 대해서 알아보고 싶다.
CPP로 캐릭터를 생성하고,
해당 캐릭터를 상속받는 BP를 만든다.
BP에서 매시를 적용하고 수정한다.
위처럼 간단하게 수정할 수 있다.
여태까지 코드로 z좌표의 위치를 맞추고, 회전했던 일을
하지 않아도 된다.
그리고 StartPack이 있으면 위의 코드가 자동 생성되는데,
아래처럼 조절할 수 있는 옵션이 존재한다.
따라서 CPP를 상속받는 BP로 생성하는 것이 이점이 많다.
GameMode를 하나 생성하고, 방금 생성한 BP Character를
Default Pawn으로 지정한다.
Project Setting에서 GameMode를 바꿔주어야하는데,
간단히 위처럼 적용이 가능하다.
Map에 PlayerStart포인트를 여러개 둘 수 있다.
랜덤으로 스폰되는 방식이고,
스폰되었을 시, F8을 누른다면, 유체이탈을 할 수 있다.
BP캐릭터에 카메라를 부착하지 않았는데 어떻게 게임화면을 볼 수 있었을까 보니,
CameraManager가 자동생성되었다.
Camera를 부착하면 해당 Camera대로 시점을 고정하지만,
없다면 default로 CameraManger의 시점대로 보여준다고 한다
기본적인 Input 설정은 완전히 같다.
MoveForward는 똑같이 매핑을 했지만,
LookUp은 Pawn에 내장된 함수를 호출하여 진행한다.
Satellite에서의 함수와 똑같은 함수를 사용한다.
굳이 사용자 함수를 만들지 않아도 똑같은 기능을 제공한다.
APawn::AddControllerPitchInput를 애용하자
[굳이 몰라도 되는 내용]
Satellite 프로젝트의 AddMovementInput은
매개변수가 2개 들어간다. 방향과 이동량이 들어가는데,현재 SimpleShooter 강의에서는 그냥 둘이 곱하여 하나의 변수로 만든다.
그래도 되는게, 2번째값인 Scale의 값이 어짜피 곱해지는데,
넣지 않으면 Default가 1이 들어가기 때문이다.
방법은 똑같다.
이번에도 오왼 보기를 Pawn의 멤버함수를 사용하였다.
정말 간단히 구현이 된다.
역시 배우길 잘했다.
Jump는 Pawn이 아닌, Character에 구현되어있다.
그대로 사용한다.
GamePad키를 추가하였다.
하지만, 조절을 해줘야한다고 한다.
그 이유는 프레임이 같아도 Mouse와 Controller의 입력비율은 다르다고 한다.
그래서 입력을 따로 만들고,
따로 사용자정의 함수를 만들어서 매핑하였다.
여기엔 RotationRate가 사용된다.
Controller입력값에 해당 값을 곱하여 마우스만큼의 이동속도를 가지게 한다.
controller가 마우스보다 AxisValue를 더 적게 입력받는듯
그리고 위처럼 DeltaTime값을 곱하여 프레임이 일정하도록 만든다.
MoveForward나 MoveRight는 Controller로 따로 만들지 않아도 되는게,
AxisValue를 그대로 바로 대입하여 사용하는것이 아니라,
곱하여 비율처럼 사용하기 떄문에 같은 결과를 낸다고 한다.
잘 모르겠다
Jump도 그냥 매핑해도 상관없는데,
키 이름이 위처럼 헷갈리게 되어있다.
참고하여 엑박의 A 키로 두었다.
컨트롤러 입력을 적용하기 위해선, Mouse와의 프레임차이를 인지해야하고,
해당 사항이 중요한것은 LookUp, LookRight 기능뿐이었다.
Camera도 Mesh처럼 CPP를 상속받은 BP에서 진행하는것이 훨씬 효율적이라고 한다.
직접 보면서 조절할 수 있기 때문이다.
CameraComponent를 추가하고, 적절한 위치에 놓았다.
인게임의 화면. 2가지 문제가 있다.
역시 이를 해결하기 위해서 SpringArm을 추가한다.
SpringArm을 추가하고, Camera의 부모로 둔다.
Camera의 위치를 000으로 되돌려 놓는다.
그러면 정확히 SpringArm의 끝에 붙게 된다.
SpringArm을 추가함으로써 한가지 문제가 해결되었다.
카메라가 벽을 뚫고 들어가지 않는다.
이게 SpringArm의 기본 기능이라고 한다.
빨간선 내에 카메라가 있어야만 보장할 수 있다
따라서 SpringArm을 사용한다면 카메라는 무조건 Default위치
그리고 SpringArm의 해당 옵션을 true로 하면,
플레이어의 Rotation을 그대로 적용받는 SpringArm이 되어
모든 문제가 해결된다.
추가로 ArmLength와 Offset을 조정한다.
살짝 우측에서 보도록 y오프셋을 60만큼 옮겼다.
그렇게 되면, 대각선이므로 해당 SpringArm이 벽에 부딪혔을 때,
자연스레 어깨 위를 바라보게 조정된다. 연출적으로 좋다
SpringArm과 Camera를 사용한다.
SpringArm을 사용하면 ArmLength내에 카메라가 위치할 수 있도록
벽을 관통하지 않게 카메라를 옮겨주고,
SpringArm의 UsePawnControlRotation을 사용하면 Pawn에 맞게 위아래를 볼 수 있다.
다시 빌드하래서 우선 Build의 Lighting만 건드려보았다.
뭔가 불완전한 해결이라는 로그가 뜬 것 같지만,
일단 해결.