根据刚体速度改变音频音高

时间:2017-04-13 03:43:15

标签: c# unity3d unity5

当玩家移动或滚动时,我们有一些声音,因为玩家是一个球。我们想要更快地增加音频的音高。我尝试了以下代码,但它没有做任何事情。我认为这是因为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;               
        }
    }

1 个答案:

答案 0 :(得分: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的{​​{1}}的默认/ MIN值。

对于0值,您可以传递球的最大值。 您可以使用inValueMax轻松确定此号码并运行游戏。 Debug.Log("RB: " + ballRigidbody.velocity.magnitude);似乎没问题。你必须确定自己的价值。

默认10值为AudioSource.pitch,因此1参数应为outValueMin

1参数将是您认为可以接受的最大音高。我发现outValueMax对此有用,因此1.5将用于1.5

您从outValueMax函数获得的任何内容都是您分配给mapValue的内容。这使您可以更好地控制声音的音高。您可以在Arduino site上阅读有关此功能的更多信息。

删除您当前的音频代码并将其替换为:

AudioSource.pitch

float rigidBodyMangintude = rigidbdy.velocity.magnitude; float pitch = mapValue(rigidBodyMangintude, 0f, 10f, 1f, 1.5f); audio.pitch = pitch; Debug.Log("Pitch: " + pitch); 功能位于此答案的顶部。