0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IEnumeratorを理解する

Last updated at Posted at 2024-11-12

はじめに

最近AndroidからUnityエンジニアに転向しました。
UnityではしばしばIEnumeratorを使います。今までは非同期処理の実装に必要なものなんだな〜くらいの認識で使用していたので、そろそろちゃんと理解しようと思います。

IEnumeratorとは

IEnumerator(アイイニューマレーター)とは、C# でリストや配列の要素を 順番に取り出して処理するための仕組みです。プログラムが IEnumerator を使うと、複数の要素を一つずつ繰り返し処理できるようになります。

Unityでは、特に コルーチン を実装する際に IEnumerator が使われ、ゲームの一時停止や待機、繰り返し処理など、非同期的な処理を表現するのに役立ちます。

基本的なイメージ

IEnumerator は、行列の列ごとに処理を進めてくれる「ポインタ」みたいなものです。例えば、リストから値を一つずつ取り出したい場合、IEnumerator が次の要素を順番に指し示し、取り出すことができます。

例えば、リスト [1, 2, 3] の要素を一つずつ順番に取り出して処理するとき、IEnumerator を使うと以下のようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        // 1から3までの要素を持つリスト
        List<int> numbers = new List<int> { 1, 2, 3 };

        // numbersリストの要素を一つずつ取り出す
        IEnumerator enumerator = numbers.GetEnumerator();
        while (enumerator.MoveNext()) // 次の要素がある間繰り返す
        {
            int number = (int)enumerator.Current; // 現在の要素を取得
            Debug.Log(number); // 出力: 1, 2, 3
        }
    }
}

Unity での使い方(コルーチン)

Unity では、IEnumerator をコルーチンに使うと、一定時間待ったり、毎フレーム少しずつ処理を進めたりすることができます。

コルーチンの例

たとえば、1秒ごとに「Hello」を5回表示する処理をしたいとき

using System.Collections;
using UnityEngine;

public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(PrintHello());
    }

    IEnumerator PrintHello()
    {
        for (int i = 0; i < 5; i++)
        {
            Debug.Log("Hello");
            yield return new WaitForSeconds(1); // 1秒待機
        }
    }
}

このコードでは、以下のことが起こります。

  1. StartCoroutine(PrintHello()) が呼び出され、コルーチンが開始します。
  2. yield return new WaitForSeconds(1) によって、毎回「Hello」を表示したあと 1秒間待機します。
  3. この処理が5回繰り返されます。

まとめ

  • IEnumerator は、複数の要素や処理を順番に扱うための仕組み。
  • UnityのコルーチンではIEnumeratorが使われ、処理を一時停止して一定時間待ったり、次のフレームまで待機したりすることができます。
  • 使い所: リストなどのコレクションの要素を順番に処理する場合や、Unity で非同期処理を行いたい場合(コルーチン)に使います。
0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?