Player의 BPM에 따라 숨이 찬 것처럼 몸이 헐떡거리는 Body Heaving을 구현.
// Body Heaving with breath, 숨이 차서 몸을 헐떡거리는 기능
// IsBodyHeavingUp 변수를 통해 직전에 동작과 반대로 수행
void APlayerDoll::BodyHeaving()
{
BodyHeavingTempLocation = DefaultCameraSpringArm->GetComponentLocation();
// ZOffset에서 BPM값을 몇으로 나누는지에 따라 Heaving 정도를 정할 수 있음.
float ZOffset = PlayerBPM / 20.0f;
if (IsBodyHeavingUp)
{
BodyHeavingTempLocation -= FVector(0.0f, 0.0f, ZOffset);
}
else
{
BodyHeavingTempLocation += FVector(0.0f, 0.0f, ZOffset);
}
DefaultCameraSpringArm->SetWorldLocation(BodyHeavingTempLocation);
IsBodyHeavingUp = !IsBodyHeavingUp;
}
위 코드가 Tick에서 약 1초마다 시행됨.
void APlayerDoll::BodyHeaving()
{
if(IsBodyHeavingUp == false)
{
BodyHeavingTempLocation = DefaultCameraSpringArm->GetComponentLocation();
BodyHeavingTempLocation += FVector(0.0f, 0.0f, PlayerBPM / 20.0f);
DefaultCameraSpringArm->SetWorldLocation(BodyHeavingTempLocation);
IsBodyHeavingUp = true;
}
else
{
BodyHeavingTempLocation = DefaultCameraSpringArm->GetComponentLocation();
BodyHeavingTempLocation -= FVector(0.0f, 0.0f, PlayerBPM / 20.0f);
DefaultCameraSpringArm->SetWorldLocation(BodyHeavingTempLocation);
IsBodyHeavingUp = false;
}
}
원래는 위처럼 코드를 작성했는데, 중복되는 코드를 줄이기 위해 수정함.
이동 시에 Scene에서 보여지는 차이가 없다.
이동 중에는 MoveForward 함수나 MoveRight 함수에서 SpringArm의 Location을 조절하기 때문에 적용이 안되는 것으로 생각하여