0

同じタイプのオブジェクト インスタンスが 2 つあります。(正確には、これは Unity3D のものですAudioSource)初期化、破棄などのアクションを両方に適用する必要があるため、反復できるようにそれらを配列に格納することをお勧めします。

AudioSource[] audioSources = new AudioSource[2];

これによりforeach、配列に対して初期化コードやその他の一般的なタスクを 1 回だけ記述できます。

ただし、これら 2 つのインスタンスは異なる目的を果たします。たとえば、最初のインスタンスは BGM 用の AudioSource であり、2 番目のインスタンスは SFX 用です。これにより、コードが読みやすくなり、配列を使用して 2 つのインスタンスを反復処理できます。

bgmSourceそのため、や などの各インスタンスに別の名前を付ける必要があると思いますsfxSource。これは正しいアプローチですか?

AudioSource bgmSource = audioSources[0];
AudioSource sfxSource = audioSources[1];
4

3 に答える 3

1

私の観点からは、あなたのソリューションは良さそうです。

コードとその他の一般的なタスクを 1 回だけ初期化する

これらのコードは AudioSource にあるといいのですが。

于 2013-06-10T05:27:27.213 に答える
1

まあ、それは合法です。それは単なる好み/デザインの問題です。それらをある種の辞書に入れることができると思います。したがって、. を通じて適切にラベルを付けることができますkey。そうすれば、isとisを覚える必要がなくなります。[0]bgmSource[1]sfxSource

于 2013-06-10T05:29:38.313 に答える
1

別の解決策はディクショナリを使用することです。このような小さな配列にはあまり適していませんが、2 番目の変数を使用して配列内の変数への参照を格納することなく、オブジェクトを区別するのに役立ちます。

例えば:

    Dictionary< string, AudioSource > audioSources;

    audioSources = new Dictionary<string, AudioSource> 
    { 
        "BGM_SOURCE", new AudioSource(),
        "SFX_SOURCE", new AudioSource()
    };

次に、文字列/定数値を使用する代わりに、列挙型を使用して辞書キーを追跡することもできます。

// Enum declaration
enum AudioSourceNames
{
    BGM_SOURCE,
    SFX_SOURCE
}


// Called before first update
public void Start()
{
    // Dictionary declaration
    Dictionary< int, AudioSource > audioSources;

    audioSources = new Dictionary< int, AudioSource > 
    { 
        ( int )BGM_SOURCE, new AudioSource(),
        ( int )SFX_SOURCE, new AudioSource()
    };


    // Accessing the dictionary
    audioSources[ ( int )AudioSourceNames.BGM_SOURCE ].Play();
}

ところで:列挙子の手法を配列で使用できます。この方法では、配列内の各 AudioSource インデックスを覚えておく必要はありません。

于 2013-06-10T18:03:18.333 に答える