Unity チュートリアルのタワーディフェンステンプレートを触ってみる(26)

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(25)ではエージェントに追加した HealthBar に付属している HealthVisualizer の解説を行った。今回はエージェントに追加した DeathEffect について解説を行っていく。

1.その他の効果、ビジュアライザー、挙動編 – DeathEffect.cs

DeathEffect.cs について稚拙ながら解説

「DeathEffect.cs」は「Assets/Scripts/Core/Health/DeathEffect.cs」の指しておりスクリプトについては以下の通り。内容としては DeathEffect の再生を行っている。

[cce_csharp]using Core.Utilities;
using UnityEngine;

namespace Core.Health
{
    /// <summary>
    /// Simple class to instantiate a ParticleSystem on a given Damageable's death
    /// </summary>
    public class DeathEffect : MonoBehaviour
    {
        /// <summary>
        /// The DamageableBehaviour that will be used to assign the damageable
        /// </summary>
        [Tooltip("This field does not need to be populated here, it can be set up in code using AssignDamageable")]
        public DamageableBehaviour damageableBehaviour;
        
        /// <summary>
        /// Death particle system
        /// </summary>
        public ParticleSystem deathParticleSystemPrefab;

        /// <summary>
        /// World space offset of the <see cref="deathParticleSystemPrefab"/> position
        /// </summary>
        public Vector3 deathEffectOffset;

        /// <summary>
        /// The damageable
        /// </summary>
        protected Damageable m_Damageable;

        /// <summary>
        /// Subscribes to the damageable's died event
        /// </summary>
        /// <param name="damageable"></param>
        public void AssignDamageable(Damageable damageable)
        {
            if (m_Damageable != null)
            {
                m_Damageable.died -= OnDied;
            }
            m_Damageable = damageable;
            m_Damageable.died += OnDied;
        }

        /// <summary>
        /// If damageableBehaviour is populated, assigns the damageable
        /// </summary>
        protected virtual void Awake () 
        {
            if (damageableBehaviour != null)
            {
                AssignDamageable(damageableBehaviour.configuration);
            }
        }

        /// <summary>
        /// Instantiate a death particle system
        /// </summary>
        void OnDied(HealthChangeInfo healthChangeInfo)
        {
            if (deathParticleSystemPrefab == null)
            {
                return;
            }

            var pfx = Poolable.TryGetPoolable<ParticleSystem>(deathParticleSystemPrefab.gameObject);
            pfx.transform.position = transform.position + deathEffectOffset;
            pfx.Play();
        }
    }
}[/cce_csharp]

36行目 : 「public void AssignDamageable(Damageable damageable)」は前回の AssignDamageable と同様に Damageable の割当を行っている。内容としては引数の Damageable を自身のグローバル変数に代入し、Damageable の died に OnDied 関数を設定している。

前回の記事についてはこちらを参照してほしい。

49行目 : 「protected virtual void Awake()」は Unity 固有の起動処理を行っている。

60行目 : 「void OnDied(HealthChangeInfo healthChangeInfo)」はエフェクトの再生を行っている。

%d人のブロガーが「いいね」をつけました。