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