Unreal

[Unreal Engine C++] RPG Camera 구현과 캐릭터 애니메이션

TIM_0529 2023. 3. 26. 15:39
반응형

 

목표

  1. 캐릭터 설정
    • [x] 블루 프린트로 기초 캐릭터 설정하기
      • [x] Camera
        • [x] RPG View 같은 경우에는 Use Controller Rotation Yaw 를 false 로 설정해 줘야 카메라 회전과 캐릭터 회전이 따로 적용이 된다.
          • [x] Use Controller Rotation Yaw = false;
          • [x] SpringArm→ Use Pawn Controller Rotation = true;
          • [x] Camera → Use Pawn Controller Rotation = true;
      • [x] Mesh
      • [x] Collison (root)
      • [x] SpringArm
    • [x] 블루프린트로 설정한 값 C++로 구현하기
  2. 캐릭터 상호 작용
    • [x] WASD로 오브젝트 이동시키기
    • [x] 마우스 클릭 감지하기
    • [x] Shift 버튼으로 달리기
  3. 애니메이션 적용
    • [x] 앞 뒤 양 옆 이동 하기 애니메이션 적용하기
    • [x] 달리기 애니메이션

궁금점

  1. 캐릭터를 이동할 때 그냥 지나쳤던 Move 함수 로직에 대해서 좀 더 깊이 있게 알아보았다.
    1. Controller 가 무엇인가 그리고 왜 위치변수 Rotation에 Controller 에 GetControllerRotation() 값을 넣는가?
    2. 캐릭터를 이동 함수를 구현할 때 FRotationMatrix 함수를 사용해서 이 함수에 회전값을 전달 해주어서 앞으로 이동하는 AddMovementInput 함수로 이동을 하는데 여기서 FRotationMatrix가 하는 것은 무엇인가?

    문제점

    1. 예제로 나와있는 MoveForward 함수는 시점에 영향을 받는데 여기서 생긴 문제점은 카메라 마우스 포지션을 하늘, 땅으로 하면 캐릭터 이동이 안 된다는 문제가 발생한다. 이러한 문제를 해결하기 위해서
    void ARPGPlayer::MoveForward(float value)
    {
    	if ((Controller != NULL) && (value != 0.0f))
    	{
    		FRotator Rotation = Controller->GetControlRotation();
    		const FVector Direction = FRotationMatrix(Rotation).GetScaledAxis(EAxis::X);
    		AddMovementInput(Direction,value);
    
    	}
    
    }
    
    
    위에 로직에서 아래 로직으로 변경해 주었더니 하늘, 땅을 바라 본 상태에서도 이동이 잘 되었다.해결 방법은 Controller가 향하고 있는 방향 (Yaw: Z) 값 만을 전달해서 방향 벡터를 구한 후 AddMovementInput 함수에 전달하는 것이다.
  2.  
void ARPGPlayer::MoveForward(float value)
{
	if ((Controller != NULL) && (value != 0.0f))
	{
		FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);
		const FVector Direction = FRotationMatrix(YawRotation).GetScaledAxis(EAxis::X);
		AddMovementInput(Direction,value);

	}

}

해결 방법은 Controller가 향하고 있는 방향 (Yaw: Z) 값 만을 전달해서 방향 벡터를 구한 후 AddMovementInput 함수에 전달하는 것이다.

 

캐릭터 이동 관련

반응형