2016-11-01 6 views
1

Unity3d 내에서 일정량의 프레임을 통해 음악을 페이드 아웃하는 정적 함수를 만들었습니다. 이 함수는 Unity3d의 FixedUpdate() 내에 배치되어 실제 시간에 따라 (또는 최소한 희망에 따라) 업데이트되도록합니다. ...하지만 지금은 찾고 있어요;로그 프레임을 통한 로그 아웃 페이드 인 및 아웃

if (CurrentFrames > 0) { 
    AudioSourceObject.volume = ((CurrentFrames/TotalFrames) * TotalVolume); 
} 
if (CurrentFrames <= 0) { 
    AudioSourceObject.volume = 0.00f; 
    return 0; 
} 
CurrentFrames--; 

이 FadeOutBGM (NumberOfFrames)처럼 함수를 제작하는 간단한 방법으로 잘 작동 :

선형에 대한 나의 현재의 수학 페이드 아웃은 다음과 같습니다 이 함수를 사용하여 어떻게 로그를 페이드 아웃시킬 것인가?

온라인 equasions를 보면, 내가해야 할 일에 대해 완전히 혼란 스럽다.

+0

올바른으로 답변을 표시 주시기 바랍니다 :

그래서, 당신의 코드는 같을 것이다. – Ralph

답변

0

내장형을 사용해도됩니다. 그렇지 않으면 미세 조정을 원한다면 조정 된 시그 모이 드 함수를 사용할 수 있습니다. (https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(t)))+from+-5+to+5)

enter image description here

그러나 당신은 당신의 페이드 아웃 기능이 더 같이 할 : 일반적으로, 시그 모이 드 기능은 다음과 같습니다 (https://www.wolframalpha.com/input/?i=plot+(1%2F(1%2Be%5E(3t-4))+from+-5+to+5)

enter image description here

를 x는 비율 인 경우 (CurrentFrames/TotalFrames) * 3, y는 출력 볼륨입니다.

그러나 첫 번째 그래프에서 두 번째 그래프까지 어떻게 변경 되었습니까? 스케일러 (즉, 3 배 또는 5 배) 및 wolfram alpha에서 지수 입력 (e^(play with this))의 오프셋 (즉 (3x - 4) 또는 (3x - 6))을 사용하여 곡선을 어떻게 보이게 할 것인지를 느낄 수 있습니다. 코드에서 함수의 입력 및 출력을 조정할 수 있으므로 반드시 곡선과 축을 특정 숫자로 일일이 맞출 필요는 없습니다.

if (CurrentFrames > 0) { 
    // I'd recommend factoring out and simplifying this into a 
    // function, but I have close to zero C# experience. 
    inputAdjustment = 3.0 
    x = ((CurrentFrames/TotalFrames) * inputAdjustment); 
    sigmoidFactor = 1.0/(1.0 + Math.E^((3.0 * x) - 4.0)); 
    AudioSourceObject.volume = (sigmoidFactor * TotalVolume); 
} 

if (CurrentFrames <= 0) { 
    AudioSourceObject.volume = 0.00f; 
    return 0; 
} 
CurrentFrames--; 
+0

감사합니다 nateslager, 나는 그것을 밖으로 시도하겠습니다! :) –

+0

당신은 성공하게 되었습니까? – Ralph

1

Unity의 AnimationCurve 클래스를 사용하면 쉽게이 작업을 수행 할 수 있습니다. 클래스에서 정의하고 Unity inspector를 사용하여 대수 곡선을 그립니다.

그런 다음 페이드 아웃 클래스에서, 같은 것을 할 :

public AnimationCurve FadeCurve; 

//... 

if (CurrentFrames > 0) { 
    float time = CurrentFrames/TotalFrames; 
    AudioSourceObject.volume = FadeCurve.Evaluate(time) * TotalVolume; 
} 

//... 

그것의 매우 유용한 완화 효과의 모든 종류의 일을 위해, 단지 서로 다른 곡선 주위를 재생 해보십시오.

+0

방금 ​​제안했습니다. 나는 이것을 확실히 시도 할 것이다. –