こんにちは。ヤマヤタケシです。
まじかよ!
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");
}
}
}
そんじゃまた。