こんにちは。ヤマヤタケシです。
まじかよ!
Updateと連動しているだけだと思っていたのに。
というか、勝手に思い込んでいた!
「[Unity] コルーチンがなぜか途中で停止するときの確認箇所 」に書いてあるとおりですが、ログを出して確認してみました。
Unity2017.2.1です。
いきなり、まとめます!
1. gameObject.SetActive(false)をするとコルーチンが止まる。
2. gameObject.SetActive(true)をしてもコルーチンは再開しない。
test:Start test:coroutine 1 test:update 1 test:update 2 test:coroutine 2 test:update 3 test:coroutine 3 test:update 4 test:coroutine 4 test:SetActive. child is Not Active test:SetActive. child is Active test:update 11 test:update 12 test:update 13
おまけにコードです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CoroutineTest : MonoBehaviour { void Start() { Debug.Log("test:Start"); while (true) { Debug.LogFormat("test:coroutine {0}", Time.frameCount); yield return null; } } void Update() { Debug.LogFormat("test:update {0}", Time.frameCount); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ActiveSwitch : MonoBehaviour { public GameObject child; void Update() { if (Input.GetKeyDown(KeyCode.Space) || Time.frameCount == 5 || Time.frameCount == 10) { child.SetActive(!child.activeSelf); Debug.LogFormat("test:SetActive. child is {0}", child.activeInHierarchy ? "Active" : "Not Active"); } } }
そんじゃまた。