2

我的环境:
Win7 x64
Unity Pro 3.5.5
c#(Visual Studio 2010)

我的目标:
我正在用 unity3d 制作手机游戏。
我做了一个炸弹效果。
效果在显示时播放自己的声音。

规格:
效果是一个带有平面图、精灵纹理的预制件。
并有一个音频源(将 wav 文件拖放到 Inspector 中
的 Prefab),炸弹效果由我的自定义对象池管理,因此我在 Inspector 中禁用了“唤醒时播放”选项。(因为它被我的自定义规则回收)
所以我编码:

//when the booming is begin

GameObject obj;
obj = MyObjectPool.Recycle("Prefabs/BombEffect");  //try recycle
if(obj != null)
{
    //every object's first creation is doing here
    obj = Instantiate("Prefabs/BombEffect") as GameObject;
    MyObjectPool.StartManage(obj);
}
obj.audio.play(); //play

问题:
炸弹效应迅速产生。(攻击速度非常快)
但声音播放就像一个单人。这意味着如果开始播放炸弹效果音频,则无法播放其他炸弹效果游戏对象的音频。直到第一个播放炸弹效果自然停止。

但据我所知,预制件的音频源可以与另一个预制件的音频源同时多次播放。但事实并非如此。我不明白。如何播放多个播放相同的音频 wav 文件?

4

1 回答 1

0

我觉得你的逻辑可能有问题。如果 MyObjectPool 中没有任何可用的对象,MyObjectPool.Recycle() 将返回 null,除非您的 Recycle() 实现正在做我不知道的事情。

我认为这就是你要找的:

    if(obj == null)
    {
       //every object's first creation is doing here
       obj = Instantiate("Prefabs/BombEffect") as GameObject;
       MyObjectPool.StartManage(obj);
    }

可能发生的情况是,您实际上从未实例化过一个对象。一旦它完成播放,它就会返回到池中,然后被回收再次播放。

于 2013-01-29T16:57:11.227 回答