投稿者 tel | 2015年2月18日

Unityでコルーチンの中でusingステートメントを使う

コルーチンの中で using ステートメントを使えばちゃんとリソースが破棄される。

ただしコルーチンを止めてしまうと dispose がよばれないみたい。

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

public class YieldTest : MonoBehaviour
{
    class Res : IDisposable
    {
        public void Dispose()
        {
            Debug.Log("dispose");
        }
    }

    IEnumerator Test()
    {
        using (Res r = new Res())
        {
            Debug.Log("1");
            yield return new WaitForSeconds(1.0f);
            Debug.Log("2");
            yield return new WaitForSeconds(1.0f);
            Debug.Log("3");
            yield break;
        }
    }
    IEnumerator iter;
    void Start()
    {
        iter = Test();
        StartCoroutine(iter);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            StopCoroutine(iter);
        }
    }
}

上記のスクリプトを実行するとマウスクリックしない場合は出力で3のあとにdisposeが表示されるが、
マウスクリックしてコルーチンを止めた場合 dispose は表示されない。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

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