【Unity】Unityでイテレーターデザインパターンを当てはめてみる

Unityでは、イテレーターパターンを使用して、コレクションの要素を順番に処理することができます。イテレーターパターンは、デザインパターンの一つであり、要素の集合体を効率的に処理するための方法を提供します。

Unityには、IEnumerableとIEnumeratorという2つの主要なインターフェースがあります。IEnumerableは、コレクションを表すためのインターフェースであり、IEnumeratorを返すGetEnumerator()メソッドを持ちます。IEnumeratorは、要素の列挙を制御するためのインターフェースであり、MoveNext()メソッドとCurrentプロパティを持ちます。

サンプル

以下に、Unityでイテレーターパターンを実装する方法の一例を示します。

using UnityEngine;
using System.Collections;

public class MyCollection : MonoBehaviour, IEnumerable
{
    private int[] elements = new int[] { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        return new MyIterator(elements);
    }
}

public class MyIterator : IEnumerator
{
    private int[] elements;
    private int currentIndex = -1;

    public MyIterator(int[] elements)
    {
        this.elements = elements;
    }

    public object Current
    {
        get { return elements[currentIndex]; }
    }

    public bool MoveNext()
    {
        currentIndex++;
        return currentIndex < elements.Length;
    }

    public void Reset()
    {
        currentIndex = -1;
    }
}

上記の例では、MyCollectionクラスがIEnumerableを実装し、GetEnumerator()メソッドを提供しています。MyIteratorクラスはIEnumeratorを実装し、要素の列挙を制御します。

このように実装すると、以下のようにイテレーターパターンを使用してコレクションの要素を順番に処理することができます。

MyCollection collection = new MyCollection();
foreach (var element in collection)
{
    Debug.Log(element);
}

上記の例では、MyCollectionクラスのインスタンスを作成し、foreachループを使用して要素を順番に取得し、それぞれの要素をログに出力しています。

このようにしてイテレーターパターンを使用することで、Unityのコレクションを効果的に処理することができます。