2017-04-13 18 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機能を使用すると、ピッチ値を簡単に制御できます。あなたがmainValueパラメータにAudioSource.pitchを渡す

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

inValueMin値については


、あなたは0あるRigidbody.velocity.magnitudeのデフォルト/ MIN値を渡します。


inValueMaxの値の場合、ボールが行えるMAX値を渡します。 この番号はDebug.Log("RB: " + ballRigidbody.velocity.magnitude);で簡単に確認でき、ゲームを実行できます。 10これは問題ないようです。自分の価値を判断する必要があります。


デフォルトAudioSource.pitch値は1ので、outValueMinパラメータは1でなければなりません。


outValueMaxパラメータは、あなたが受け入れられると思われる最大のピッチになります。 1.5がこれに対応していることがわかりましたので、1.5outValueMaxに使用されます。あなたは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

関連する問題