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

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(42)ではそのステージで使用できるタワーを設定するのに用いる TowerLibrary の解説を行った。今回は Agent の Wave を登録する Wave の継承関係にある TimedBehaviour について解説を行っていく。

1.タワーディフェンステンプレートのステージの設定編 – TimedBehaviour.cs

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

「TimedBehaviour.cs」は「Assets/Scripts/Core/Utilities/TimedBehaviour.cs」の指しておりスクリプトについては以下の通り。内容としては Timer のリストの管理を行っている。

[cce_csharp]using System.Collections.Generic;
using UnityEngine;

namespace Core.Utilities
{
	/// <summary>
	/// Abstract based class for helping with timing in MonoBehaviours
	/// </summary>
	public abstract class TimedBehaviour : MonoBehaviour
	{
		/// <summary>
		/// List of active timers
		/// </summary>
		readonly List<Timer> m_ActiveTimers = new List<Timer>();

		/// <summary>
		/// Adds the timer to list  of active timers
		/// </summary>
		/// <param name="newTimer">the  timer to be added to the list of active timers</param>
		protected void StartTimer(Timer newTimer)
		{
			if (m_ActiveTimers.Contains(newTimer))
			{
				Debug.LogWarning("Timer already exists!");
			}
			else
			{
				m_ActiveTimers.Add(newTimer);
			}
		}

		/// <summary>
		/// Removes timer from list of active timers
		/// </summary>
		/// <param name="timer">the timer to be removed from the list of active timers</param>
		protected void PauseTimer(Timer timer)
		{
			if (m_ActiveTimers.Contains(timer))
			{
				m_ActiveTimers.Remove(timer);
			}
		}

		/// <summary>
		/// Resets and removes the timer
		/// </summary>
		/// <param name="timer">the timer to be stopped</param>
		protected void StopTimer(Timer timer)
		{
			timer.Reset();
			PauseTimer(timer);
		}

		/// <summary>
		/// Iterates through the list of active timers and ticks
		/// </summary>
		protected virtual void Update()
		{
			for (int i = m_ActiveTimers.Count - 1; i >= 0; i--)
			{
				if (m_ActiveTimers[i].Tick(Time.deltaTime))
				{
					StopTimer(m_ActiveTimers[i]);
				}
			}
		}
	}
}[/cce_csharp]

20行目 : 「protected void StartTimer(Timer newTimer)」はグローバル変数である m_ActiveTimers に対してタイマーの追加を行っている。

36行目 : 「protected void PauseTimer(Timer timer)」はグローバル変数である m_ActiveTimers に引数のタイマーがあれば、m_ActiveTimers から削除を行っている。

48行目 : 「protected void StopTimer(Timer timer)」は引数の Timer を Reset 後、PauseTimer の処理を行っている。

57行目 : 「protected virtual void Update()」は Unity 固有の更新処理を行っている。内容としてはすべての Timer リストに経過時間を伝え、Timer の経過処理に達していれば StopTimer の処理を行っている。

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