Unity之Coroutine协程(二)

  • 可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行
  • 协程的定义:1)本地数据在后续调用中始终保持,2)控制离开时挂起,重新进入时继续执行。
  • 开启协程:
      1.public Coroutine StartCoroutine(IEnumerator routine);
      2.public Coroutine StartCoroutine(string methodName);
      3.public Coroutine StartCoroutine(string methodName, [DefaultValue("null")] object value);
  • 暂停协程:
      4.public void StopAllCoroutines();
      5.public void StopCoroutine(string methodName);
      6.public void StopCoroutine(IEnumerator routine);
      7.public void StopCoroutine(Coroutine routine);
  • public void StopCoroutine(IEnumerator routine); 参数不能直接是方法,对应的StartCoroutine()参数应该是IEnumerator类型的对象,比如:直接StopCoroutine(PutInfo());是不能暂停协程的。
  • 要想暂停启动的协程,必须注意搭配:字符串与字符串搭配(启动协程与暂停协程的参数都为字符串)、IEnumerator与IEnumerator搭配(启动协程与暂停协程的参数都为iEnumerator)、StopCoroutine的参数是StartCoroutine的返回值。

    IEnumerator PutInfo()
    {
        float second = 0;
        print(second + "    | " + Time.realtimeSinceStartup);
        while (true)
        {
            yield return new WaitForSeconds(1);
            second++;
            print(second + "    | " + Time.realtimeSinceStartup);
        }
    }
    IEnumerator PutInfo(int i)
    {
        while (true)
        {
            yield return new WaitForSeconds(1);
            print(++i);
        }
    }
---------------------------------处理不带参数------------------------------------
-------------------------------1与5不能搭配使用---------------------------
-------------------------------1与6能搭配使用------------------------------
    private IEnumerator Ienum_Arg;
    private IEnumerator Ienum_NoArg;
    void Start()
    {
        Ienum_Arg = PutInfo(0);
        Ienum_NoArg = PutInfo();
    }
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))          
        {
            StartCoroutine(Ienum_NoArg);
        }
        if (Input.GetMouseButtonDown(1))
        {
            StopCoroutine(Ienum_NoArg);
        }
    }
-------------------------------1与7能搭配使用------------------------------
    private Coroutine coroutine;
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))            
        {
            coroutine = StartCoroutine(PutInfo());
        }
        if (Input.GetMouseButtonDown(1))
        {
            StopCoroutine(coroutine);
        }
    }
-------------------------------2与5能搭配使用------------------------------
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))    
        {
            StartCoroutine("PutInfo");
        }
        if (Input.GetMouseButtonDown(1))
        {
            StopCoroutine("PutInfo");
        }
    }
-------------------------------2与6不能搭配使用------------------------------
-------------------------------2与7能搭配使用--------------------------------
    private void Update()
    {
         if (Input.GetMouseButtonDown(0))            
        {
            coroutine = StartCoroutine("PutInfo");
        }
        if (Input.GetMouseButtonDown(1))
        {
            StopCoroutine(coroutine);
        }
    }
Unity之Coroutine协程(二)

---------------------------------处理带参数------------------------------------
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))  
        {
            StartCoroutine(Ienum_Arg);
        }
        if (Input.GetMouseButtonDown(1))
        {
            StopCoroutine(Ienum_Arg);
        }
    }
Unity之Coroutine协程(二)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值