Алексей Шиманский Asked:2020-10-30 22:31:21 +0800 CST2020-10-30 22:31:21 +0800 CST 2020-10-30 22:31:21 +0800 CST InvokeRepeating 和协程继续在停用的脚本中工作。该怎么办? 772 当我在脚本中运行方法InvokeRepeating时,在其停用(组件/脚本)之后,该方法以InvokeRepeating. 与协程相同。为什么?怎么办? c# 1 个回答 Voted Best Answer Алексей Шиманский 2020-10-30T22:31:21+08:002020-10-30T22:31:21+08:00 不幸或幸运的是,这些是这些方法的特点。 一般来说,如果脚本使用InvokeRepeating任一协同程序,那么您应该记住: 对于 InvokeRepeating: gameObject.SetActive(false)如果您停用该对象,则此脚本挂起的整个对象 ( )InvokeRepeating仍将继续工作 如果disable只为一个组件设置,InvokeRepeating它仍然会继续工作 对于协程: 如果您停用gameObject.SetActive(false)此脚本挂起的对象 ( ),协程将停止 如果disable只为组件设置,协程仍然会继续工作 如果要在禁用InvokeRepeating组件或对象时禁用工作,可以使用MonoBehaviour.OnDisable()和MonoBehaviour.CancelInvoke / MonoBehaviour.StopCoroutine 方法。而且,原则上OnDisable,如果需要,您可以在关闭脚本/对象时编写逻辑 void OnDisable() { CancelInvoke(); } 您可以在OnEnable()中重新启用它 例子: using UnityEngine; public class InvokeRepeatingNotStop : MonoBehaviour { private int i = 0; void Start() { InvokeRepeating("CountUp", 0.0f, 0.5f); Invoke("Disable", 3.0f); } void Disable() { enabled = false; // gameObject.SetActive(false); } void CountUp() { i = i + 1; Debug.Log("i=" + i); } void OnDisable() { // CancelInvoke(); } } 取消注释CancelInvoke()将停止工作。
不幸或幸运的是,这些是这些方法的特点。
一般来说,如果脚本使用
InvokeRepeating
任一协同程序,那么您应该记住:对于 InvokeRepeating:
gameObject.SetActive(false)
如果您停用该对象,则此脚本挂起的整个对象 ( )InvokeRepeating
仍将继续工作disable
只为一个组件设置,InvokeRepeating
它仍然会继续工作对于协程:
gameObject.SetActive(false)
此脚本挂起的对象 ( ),协程将停止disable
只为组件设置,协程仍然会继续工作如果要在禁用
InvokeRepeating
组件或对象时禁用工作,可以使用MonoBehaviour.OnDisable()和MonoBehaviour.CancelInvoke / MonoBehaviour.StopCoroutine 方法。而且,原则上OnDisable
,如果需要,您可以在关闭脚本/对象时编写逻辑您可以在OnEnable()中重新启用它
例子:
取消注释
CancelInvoke()
将停止工作。