2017-04-13 73 views
1

當玩家移動或滾動時,我們有一些聲音是球員。我們希望增加音頻的音調,球速度越快。我嘗試了下面的代碼,但它什麼也沒做。我認爲這是因爲p的價值太小了。 我記得在某個地方看到有一些內置的東西來處理這個問題,但我想不出我看到了什麼或它被稱爲什麼。更改基於剛體速度的音頻音高

在此先感謝!

 void FixedUpdate() 
    { 
#if UNITY_EDITOR || UNITY_STANDALONE 
     float moveHorizontal = Input.GetAxis("Horizontal"); 
     float moveVertical = Input.GetAxis("Vertical"); 
     Vector3 move = new Vector3(-moveHorizontal, 0.0f, -moveVertical);    
     move = move * (speed/15f); 
     //maxSpeed = maxSpeed/5; 
#else 
     // Player movement in mobile devices 
     // Building of force vector    
     Vector3 move = new Vector3(-Input.acceleration.x, 0.0f, -Input.acceleration.y); 
     // Adding force to rigidbody 
     move = move * (speed/15f); 
     //move = movement * speed * Time.deltaTime;    
#endif 
     rigidbdy.AddForce(move); 
     var p = rigidbdy.velocity.magnitude/speed; 
     audio.pitch = Mathf.Clamp(p, 1.0f, 2.0f); // p is clamped to sane values 

     //Limits the max speed 
     if (rigidbdy.velocity.magnitude > maxSpeed) 
     { 
      rigidbdy.velocity = rigidbdy.velocity.normalized * maxSpeed;    
     } 
    } 

回答

2

您可以使用map函數輕鬆控制音高值。

float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax) 
{ 
    return (mainValue - inValueMin) * (outValueMax - outValueMin)/(inValueMax - inValueMin) + outValueMin; 
} 

您在AudioSource.pitch傳遞給mainValue參數。


對於inValueMin值,在默認通/中Rigidbody.velocity.magnitude這是0的最小值。


對於inValueMax價值,您在MAX通過值你的球,可以走了。 您可以使用Debug.Log("RB: " + ballRigidbody.velocity.magnitude);輕鬆確定這個數字並運行遊戲。 10似乎對此很好。你必須確定你自己的價值。


默認AudioSource.pitch值爲1,所以outValueMin參數應該是1


outValueMax參數將是您認爲可以接受的最大音高。我發現1.5對此適用,因此1.5將用於outValueMax


無論你從mapValue功能得到的是分配給AudioSource.pitch什麼。這可以讓你更好地控制聲音的音調。您可以在Arduino site上閱讀更多關於此功能的信息。

刪除當前的音頻編碼以及與此替換:

float rigidBodyMangintude = rigidbdy.velocity.magnitude; 
float pitch = mapValue(rigidBodyMangintude, 0f, 10f, 1f, 1.5f); 

audio.pitch = pitch; 
Debug.Log("Pitch: " + pitch); 

mapValue功能是這個答案的頂部。

+0

謝謝。我會在今天晚些時候嘗試並報告。 – jbassking10