반응형
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 |