오늘의 개발

Player의 BPM에 따라 숨이 찬 것처럼 몸이 헐떡거리는 Body Heaving을 구현.

코드(PlayerDoll.cpp)

// 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을 조절하기 때문에 적용이 안되는 것으로 생각하여