[Unity] 화면 흔들림 Virtual Camera로 구현하기

조팽이·2024년 3월 25일

Unity

목록 보기
2/13

개인 프로젝트에서 카메라 흔들기를 구현하고 싶어 열심히 구글링 해보니
카메라의 transform의 position을 건드리는 방법이 다수였다.

하지만 내 프로젝트에선 Virtual Camera를 구현헀고 Follow까지 설정했기에
일반적인 position흔들기로는 정상작동되지 않았다.

그러던 중 Virtual Camera에 Noise옵션에 관한 정보를 읽었고 내 프로젝트에 구현하였다.

CinemachineVirtualCamera에서 Noise 옵션을 Basic Multi Channel Perlin으로 바꾸고 Noise Profile을 6D Shake로 설정하였다.
그리고 이제 중요한데 Amplitude Gain이랑 Frequency Gain이라는 옵션이 보인다. Amplitude Gain은 기본값이 1이며 진폭을 나타내는데 이것이 카메라 흔들림의 세기를 나타낸다.
Frequency Gain은 마찬가지로 기본값이 1이며 주기?를 나타내는데 카메라 흔들림의 속도를 나타낸다. Amplitude Gain이 높을수록 더 세게, Frequency Gain이 높을수록 더 자주 카메라가 흔들리는 것이다.

구현은 다음과 같다.

using Cinemachine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControl : MonoBehaviour
{
    CinemachineVirtualCamera vc;
    CinemachineBasicMultiChannelPerlin noise;
    void Awake() {
        vc = GetComponent<CinemachineVirtualCamera>();
    }
    void Start()
    {
        noise = vc.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
    }

    public void ShakeCamera() {
        noise.m_AmplitudeGain = 5f; 
        noise.m_FrequencyGain = 1f;

    }

    public void StopCameraShake() {
        noise.m_AmplitudeGain = 0f;
        noise.m_FrequencyGain = 0f;
    }
   
}

Camera Control이라는 Script를 virtual Camera를 가지고 있는 오브젝트에 component로 넣어주었다. 다른 함수나 오브젝트에서 ShakeCamera를 통해 흔들림을 만들 수 있고, StopCameraShake를 통해 흔들림을 멈추게 할 수 있다.

꽤 그럴싸한 카메라 흔들림이 연출된다.

profile
게임개발자

0개의 댓글