Unity Engine

Cinemachine - Impulse + SecondaryNoise

Aostols 2023. 2. 9. 09:58
반응형

Impulse와 그에 따른노이즈를 함께 사용하는 방법 입니다.

 

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        DoImpulse();
    }
}

private void DoImpulse()
{
    _source.m_DefaultVelocity = new Vector3(0, 0, 3f);
    _source.m_ImpulseDefinition.m_ImpulseDuration = 0.5f;
    _source.m_ImpulseDefinition.m_ImpulseChannel = 1;

    _source.GenerateImpulse();
}

Impulse는 기존과 동일한 방식을 사용합니다.

스페이스바를 누르면 Impulse가 동작 하도록 하는 방식입니다.

 

이제 여기에 추가할 Noise를 하나 만들어 줍니다.

Project 창에서 우클릭으로 Create->Cinemachine->NoiseSettings 를 선택해 줍니다.

 

RotateZ 를 5, 5로 주었습니다.

수치는 원하시는데로 넣으시면 됩니다.

 

Impulse는 ImpulseSource에서 발생 시키는 것이라면 SecondaryNoise는 ImpulseListener에서 처리하는 내용 입니다.

Cinemachine Impulse Listener 인스펙터를 보시면 Reaction Settings 라는 항목이 보입니다.

여기서 Secondary Noise를 설정 할 수 있습니다.

다만 인스펙터에서 설정하지 않고 코드로 설정 할 예정입니다.

 

[SerializeField] private CinemachineImpulseListener _listener;

[SerializeField] private NoiseSettings _secondaryNoise;

일단 변수 2개를 SerializeField로 만들고 각각 할당 해 줍니다.

 

private void DoImpulse()
{
    _source.m_DefaultVelocity = new Vector3(0, 0, 3f);
    _source.m_ImpulseDefinition.m_ImpulseDuration = 0.5f;
    _source.m_ImpulseDefinition.m_ImpulseChannel = 1;

    _listener.m_ReactionSettings.m_SecondaryNoise = _secondaryNoise;
    _listener.m_ReactionSettings.m_Duration = 5f;
    _listener.m_ReactionSettings.m_AmplitudeGain = 1;
    _listener.m_ReactionSettings.m_FrequencyGain = 1;

    _source.GenerateImpulse();
}

이제 중간에 _listener관련된 항목을 추가 합니다.

 

다음과 같이 노이즈가 추가된 모습을 볼 수 있습니다.

 

주의사항

Secondary Noise는 리액션의 영역이라서 ImpulseSource의 Velocity에 영향을 받습니다.

그 수치만큼 배율로 동작합니다.

따라서 Velocity가 0이라면 표시되지 않고 높으면 높을수록 Secondary Noise도 강하게 표시됩니다.

반응형

'Unity Engine' 카테고리의 다른 글

[Unity] ScriptableObject + Reflection  (0) 2023.03.28
[Unity]Job System + String  (0) 2023.03.03
Cinemachine - Impulse  (0) 2023.01.02
Cinemachine - Noise  (0) 2022.12.29
[Unity] Cinemachine - Blend  (0) 2022.12.21