2

私の環境:
Win7 x64
Unity Pro 3.5.5
c#(Visual studio 2010)

私の目的:
私は unity3d でモバイルゲームを作っています。
ボムエフェクトを作っています。
エフェクトは、表示されているときに独自のサウンドを再生します。

仕様:
エフェクトは平面図、スプライト テクスチャを持つ単一のプレハブになります。
オーディオソース (wav ファイルを Inspector の Prefab にドラッグ & ドロップ)
があり、bombeffect はカスタム オブジェクト プールによって管理されるため、Inspectorで 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

問題:
爆弾効果が急速に発生します。(アタックスピードは非常に速い)
が、サウンドの再生はSINGLETONのように機能します。これは、bombeffect オーディオの再生が開始された場合、他の Bombeffect ゲームオブジェクトのオーディオが再生できないことを意味します。最初のPLAYING爆弾効果が自然に止まるまで。

しかし、私の知る限り、プレハブのAudio Sourceは、別のプレハブのAudio Sourceと同時に複数再生できます。そうではありません。理解できない。複数再生の同じオーディオ 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 に答える