Health & UI
TankHealthスクリプトの23行目にm_ExplosionAudio = m_ExplosionParticles.GetComponent<AudioSource>();
とあり、public GameObject m_ExplosionPrefab;
で定義されたゲームオブジェクトのAudioSourceを取得する一文があります。
m_ExplosionParticlesはm_ExplosionPrefabをインスタンス化したゲームオブジェクトのParticleSyetemコンポーネントでしかないので、m_ExplosionAudio = m_ExplosionParticles.gameObject.GetComponent<AudioSource>();
とする必要があると思うのですが、
なぜ、
AudioSource = ParticleSystem.GetComponent<AudioSource>();
のような構造で、同じゲームオブジェクトに付加された別のコンポーネントを取得できるのでしょうか?
GetComponentには「GameObject.GetComponent」と「Component.GetComponent」の二種類があり、GameObject.GetComponentにはそのオブジェクトにアタッチされているコンポーネントを取得する事ができ、Component.GetComponentはそのコンポーネントのアタッチされているGameObjectにアタッチされているコンポーネントを取得できる関数です。
なので、GameObject.GetComponentでもComponent.GetComponentでもどちらでも対応できているわけです。 https://docs.unity3d.com/ja/current/ScriptReference/GameObject.GetComponent.html
https://docs.unity3d.com/ja/2018.4/ScriptReference/Component.GetComponent.html