TanksのPhase4.タンクの体力スライダーTankHealth.csのAwake()内での記述について | Unity Forum | Tech Stadium Forum

TanksのPhase4.タンクの体力...
 
通知
すべてクリア

TanksのPhase4.タンクの体力スライダーTankHealth.csのAwake()内での記述について  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 5:41 pm  

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>();


引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 5:42 pm  

その2つは、同じように見えて違う処理をしています。

前者では「プレハブを作り、そのプレハブのParticleSystemを取得し、『そのParticleSystemを変数に代入』」「次に、『先程変数に代入したParticleSystem』のAudioSourceを取得し、それをまた別の変数に代入」と言う処理を行っています。

ですが後者の処理ではAudioSourceを取得する際に、また新たにプレハブを作ってしまってます。
この場合ですと、『先ほど変数に代入したParticleSystem』と言う部分が『また新たに作成したプレハブ』に変わってしまいます。この時点で、参照しているオブジェクトに違いがあるのが分かると思います。

さらに、前者の書き方ですと、「生成したプレハブのParticleSystem」にアタッチされている「AudioSource」を取得していますが
後者の書き方ですと「生成したプレハブ」にアタッチされている「AudioSource」を取得してしまいます。

結果的に、参照にしているオブジェクトと取得するAudioSourceの値が変わってしまいます。
このように、少しの違いでも大きな差が出てしまいます。 


返信引用
共有:
タイトルとURLをコピーしました