TanksのPhase4.タンクの体力スライダー
TankHealth.csのAwake()内での記述について
m_ExplosionParticles = Instantiate(m_ExplosionPrefab).GetComponent<ParticleSystem>();
m_ExplosionAudio = m_ExplosionParticles.GetComponent<AudioSource>();
これは、下記と同じ事をしているのでしょうか・・?
m_ExplosionParticles = Instantiate(m_ExplosionPrefab).GetComponent<ParticleSystem>();
m_ExplosionAudio = Instantiate(m_ExplosionPrefab).GetComponent<AudioSource>();
その2つは、同じように見えて違う処理をしています。
前者では「プレハブを作り、そのプレハブのParticleSystem
を取得し、『そのParticleSystem
を変数に代入』」「次に、『先程変数に代入したParticleSystem
』のAudioSource
を取得し、それをまた別の変数に代入」と言う処理を行っています。
ですが後者の処理ではAudioSource
を取得する際に、また新たにプレハブを作ってしまってます。
この場合ですと、『先ほど変数に代入したParticleSystem
』と言う部分が『また新たに作成したプレハブ』に変わってしまいます。この時点で、参照しているオブジェクトに違いがあるのが分かると思います。
さらに、前者の書き方ですと、「生成したプレハブのParticleSystem
」にアタッチされている「AudioSource
」を取得していますが
後者の書き方ですと「生成したプレハブ」にアタッチされている「AudioSource
」を取得してしまいます。
結果的に、参照にしているオブジェクトと取得するAudioSource
の値が変わってしまいます。
このように、少しの違いでも大きな差が出てしまいます。