我的环境:
Win7 x64
团结专业3.5.5
C#( 2010)
我的目标:
我正在用unity3d制作一个手机名。
我做了个轰炸。
这种效果在显示时会播放自己的声音。
规格:
效果是一个单一的预制件与一个计划,精灵纹理。
并且有一个Audiosource (拖放wav文件到检查器中的预置文件)
bombeffect是由我的自定义对象池管理的,因此我在检查器中禁用了play on awake选项。(因为它是按照我的习惯规则回收的)
所以我编码:
//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文件?
发布于 2013-01-29 16:57:11
我想你的逻辑可能有问题。如果MyObjectPool中没有任何可用的对象,MyObjectPool.Recycle()将返回null,除非您的回收()实现正在做一些我不知道的事情。
我想这就是你要找的:
if(obj == null)
{
//every object's first creation is doing here
obj = Instantiate("Prefabs/BombEffect") as GameObject;
MyObjectPool.StartManage(obj);
}可能发生的情况是,您从未实际实例化更多的一个对象。一旦它完成播放,它返回到池,然后被回收,以便再次播放。
https://stackoverflow.com/questions/14517931
复制相似问题