Unityで音を鳴らすのは簡単なので、さくっと鳴らせるわけですが、ナニも考えずにバリバリと、例えば敵の破壊音などを個別に鳴らしてしまうと、音がかぶってひどいことになってしまいます。
で、同じ音を重ねて再生しないようにしなければいけないわけですが、ちょっと調べたところ、特にそういう機能は用意されてないようなので、とりあえず自前で処理するように。
[cc lang=”python”]
import UnityEngine
class Se(MonoBehaviour):
public seTable as (AudioClip)
#
private seIndex as Hash = {}
private Fse as (bool) = array(bool, 10)
private seWait as (single) = array(single, 10)
def Awake():
for i in range(len(seTable)):
seIndex[seTable[i].name] = i
seWait[i] = 0.0F
Fse[i] = false
def Play(name as string):
Fse[seIndex[name]] = true
def Update ():
for i in range(len(seTable)):
seWait[i] += Time.deltaTime
if Fse[i] and seWait[i] > 0.1F:
audio.PlayOneShot(seTable[i])
seWait[i] = 0.0F
Fse[i] = false
[/cc]
こんな感じで専用の効果音管理用オブジェクトを用意して一元的に扱うようにしてみました。
各音ごとにウエイトをカウントして必要ならUpdate内で鳴らす感じです。ちょっとしたアクションゲームならこれぐらいでいいんじゃないかなあ。ウエイトはBGMのテンポに合わせたほうがいいですな。効果音は曲の一部だからねえ。
もっといい方法などあれば教えて下さい。
どうでもいいけどBooのListやHashは型が全部objectになっててちょー使いづらいですな。型固定のHashってあるのかな?