我正在按照书中的指示来组合一个简单的FPS。但是,我没有得到与本书所说的相同的结果。
我一直试图做的最后一件事是给我的"枪"添加一个声音,这样这个声音剪辑" pop.wav"你开火时玩。
在我采取步骤添加声音之前,这是工作代码。
var projectile : Rigidbody;
var speed = 50;
function Update () {
if(Input.GetButtonDown("Fire1"))
{
var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
Vector3(0,-1,0), transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
}
}
所以我做了本书所说的,并导入了Pop.wav。然后它说要在脚本中添加两行简单的代码。
var projectile : Rigidbody;
var speed = 50;
var pop : AudioClip;
function Update () {
if(Input.GetButtonDown("Fire1"))
{
var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
Vector3(0,-1,0), transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
audio.Play(pop);
}
}
Assets / FireProjectile.js(12,27):BCE0023:没有合适版本的UnityEngine.AudioSource.Play'对于参数列表'(UnityEngine.AudioClip)'被发现了。
我真的很感激你的帮助。
答案 0 :(得分:1)
我没有看到您将要播放的文件分配给音频片段......类似于
pop.clip = ...
对Unity 3d的简短搜索提到分配剪辑,并检查它是否已准备好播放。
答案 1 :(得分:1)
实际上,你忽略了脚本之外的东西。实际上,您需要在场景中添加音频侦听器和音频源。然后,你将能够听到声音。
原因在于,统一允许3D声音,即在3D空间中具有位置的声音,并且如果靠近它则会增加音量。音频源显然是声音的来源,而Audio Listener就是你的耳朵所在。通常,音频监听器在您的角色上。但是你可以对它进行装配,使其位于任何对象上,但是那个对象必须靠近音频源,而不是角色,这根本没有任何意义。
但是,请记住一次只能有一个音频侦听器。允许无限音频源。 :)
答案 2 :(得分:1)
您必须使用audio.PlayOneShot(pop)
代替audio.Play()
。
但是如果你想使用audio.Play();
,你应该知道它不会将AudioClip作为参数。
使用以下代码,并确保通过将弹出声音从Project拖动到检查器,将pop指定给Audio Source组件的Audio Clip属性。 audio.Play()
在AudioSource中使用默认指定的音频剪辑。
var projectile : Rigidbody;
var speed = 50;
function Update () {
if(Input.GetButtonDown("Fire1"))
{
var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
Vector3(0,-1,0), transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
audio.Play();
}
}
@script RequireComponent(AudioSource)
答案 3 :(得分:1)
您需要分配变量。这就像是
pop.clip = (anything here)
答案 4 :(得分:0)
基于Unity文档(我从未使用Unity,所以我不能确定这是正确的)我发现你可能想要做这样的事情。
var projectile : Rigidbody;
var speed = 50;
var pop : AudioClip;
...
if(Input.GetButtonDown("Fire1"))
{
var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
Vector3(0,-1,0), transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
audio.PlayOneShot(pop);
}
这实际上是你所要做的。分配一个变量,然后在按下Fire1时告诉它在更新功能中播放,默认为LMB。
PlayOneShot意味着声音不会循环或任何东西,我认为你想要枪声或类似声音。在括号内,您只需命名您想要播放的声音。