본문 바로가기
TIL

01.25 (TIL-Unity)

by 오랑이귀엽다 2024. 1. 25.

구현한 기능: 진동 효과 (Camera Shake Effect)

  • 목적: 플레이어가 특정 영역에 진입하거나 특정 상호작용을 할 때 시각적 및 몰입감 있는 피드백 제공.
  • 사용한 스크립트: SW_ShakeEffect , Cinemachine 라이브러리 사용.
  • 구현 코드 (간단한 로직):
더보기

// 진동 효과 적용 함수
private void ApplyShakeEffect()
{
    // Cinemachine 컴포넌트를 통해 진동 효과 적용
    var perlin = virtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
    perlin.m_AmplitudeGain = amplitudeGain; // 진동 강도 설정
    perlin.m_FrequencyGain = frequencyGain; // 진동 빈도 설정

    // 지정된 시간 후에 진동 효과 중지
    StartCoroutine(StopCameraShake());
}

// 트리거 영역에 진입 시 진동 효과 적용
void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log("진입: 플레이어가 트리거에 진입함.");
        ApplyShakeEffect(); // 진동 효과 적용
    }
}

// 상호작용 인터페이스 구현
public void OnInteract()
{
    Debug.Log("상호작용: 플레이어가 오브젝트와 상호작용함.");
    ApplyShakeEffect(); // 진동 효과 적용
}

// 키패드 성공 시 이벤트 리스너
private void ActivateShakeEffect()
{
    Debug.Log("키패드 해제: 보안 키패드가 성공적으로 해제됨.");
    ApplyShakeEffect(); // 진동 효과 적용
}

사용 이유

  • 트리거 방식: 플레이어가 특정 지역에 진입할 때 진동 효과로 긴장감 또는 긴박함 전달.
  • 상호작용 방식: 특정 오브젝트와의 상호작용 시 진동 효과로 행동의 중요성 강조.
  • 키패드 성공 방식: 보안 키패드 해제 시 성공적인 해제를 시각적으로 강조.

트러블슈팅: Noise Profile 설정 문제

  • 왜(Why): 진동 효과는 게임 내에서 긴장감을 높이거나, 특정 이벤트의 실감 나는 반응을 제공하기 위해 중요합니다. CinemachineBasicMultiChannelPerlin 컴포넌트를 통한 진동 효과의 부재는 사용자 경험에 영향을 미치며, 게임의 몰입감을 저해할 수 있습니다.
  • 어떻게(How): 이 문제를 해결하기 위해, 진동 효과를 담당하는 컴포넌트인 CinemachineBasicMultiChannelPerlin의 설정을 확인하였습니다. 여기서 Noise Profile이 설정되지 않았다는 것을 발견했습니다. Noise Profile은 진동 효과의 세부 사항을 결정하는 중요한 요소로, 이를 설정하지 않으면 진동 효과가 전혀 나타나지 않습니다.
  • 무엇(What): Cinemachine Virtual Camera의 Inspector 창 내 'Noise' 섹션을 찾아 'Add Noise Profile'을 클릭함으로써 문제를 해결하였습니다. 적절한 Noise Profile을 추가함으로써, 진동 효과가 정상적으로 작동하기 시작했습니다. 이 과정을 통해, 진동 효과를 성공적으로 게임에 통합할 수 있었습니다.

Noise Profile:

진동 효과를 위해서는 BasicMultiChannelPerlin 컴포넌트에 Noise Profile 이 할당되어 있어야 함

Unity의 Cinemachine 패키지에는 여러 Noise Profile이 포함되어 있으며, 이 중 하나를 선택하거나 사용자 정의 Noise Profile을 만들어 사용할 수 있다.

Noise Profile이 설정되지 않은 경우 진동 효과가 발생하지 않을 수 있다.

  • 6D Shake: 모든 방향으로 강한 진동을 시뮬레이션하여, 큰 충격이나 폭발이 발생했을 때 사용할 수 있다.
  • 6D Wobble: 좀 더 부드럽고 불규칙한 움직임을 시뮬레이션하여, 예를 들어 바다 위의 배나 약한 지진을 표현할 때 적합.
  • Handheld Series (normal, mild, strong, tele, wideangle): 사람이 카메라를 들고 있을 때의 자연스러운 손떨림을  나타냄. 이 시리즈는 강도와 스타일에 따라 여러 가지가 있으며, 예를 들어 'mild'는 약한 흔들림을, 'strong'은 더 강한 흔들림을 나타냄. 'tele'은 망원 렌즈를 사용할 때의 떨림을, 'wideangle'은 넓은 각도의 렌즈를 사용할 때의 떨림을 나타냄.

Pivot Offset:

진동 효과의 중심점을 결정.

이 값은 카메라가 어떤 방향으로 진동할지를 결정하는 데 영향을 줄 수 있다.

필요에 따라 조정해볼 수 있다.

 

AmplitudeGain:

이 값은 진동의 강도 또는 "진폭"을 제어. 값이 높을수록 카메라의 진동이 크게 느껴진다. 예를 들어, 폭발 장면에서 카메라가 강한 충격을 받는 것처럼 보이게 하려면 AmplitudeGain 값을 높일 수 있다.

 

FrequencyGain:

이 값은 진동의 빈도수 또는 "주파수"를 제어. 값이 높을수록 카메라는 더 빠르게 진동. 진동이 빠르게 발생해야 하는 상황, 예를 들어 머신건의 연사 효과나 지진의 빠른 진동을 시뮬레이션하려면 FrequencyGain 값을 높일 수 있다.

 

 

'TIL' 카테고리의 다른 글

01.29 (TIL-Unity)  (0) 2024.01.29
01.26 (TIL-Unity)  (0) 2024.01.26
01.24 (TIL-Unity)  (0) 2024.01.24
01.23 (TIL-Unity)  (0) 2024.01.23
01.22 (TIL-Unity)  (0) 2024.01.22