GameTang
骑士
骑士
  • UID4314
  • 粉丝0
  • 关注1
  • 发帖数39
  • 社区居民
阅读:385回复:2

菜鸟日记(二)《协程的简单使用》

楼主#
更多 发布于:2018-01-03 10:26

简单记下协程的使用  协程:顾名思义,主要是协助主线程工作的,有时候巧妙的运用也会事半功倍的

首先我了解协程主要是自己优化不是太好,我想着是就是使用协程来代替Update,因为我看中的是协程刷新间隔可控的部分,因为有的检测功能部分并不需要Update那么快的刷新频率,感觉刷新没有那么快的话就不会消耗那么多资源。很显然想多的,人家Unity早想到这问题的,看了一段时间,协程短时间代替Update去执行还好,时间长了协程占的资源更多。。。。

代替的话就不指望了,东西还是暂时记录下吧,以后也会用的着,免得到时再忘了

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class IEnumator : MonoBehaviour

{

    private bool isStart;

    private float count = 10;

    // Use this for initialization

    void Start()

    {

        StartCoroutine("Countdown");

    }

    // Update is called once per frame

    void Update()

    {

        if (Input.GetKeyDown(KeyCode.W))

        {

            StartCoroutine("Updates");

        }

        if (Input.GetKeyDown(KeyCode.A))

        {

            if (!isStart)

            {

                isStart = true;

            }

            else

            {

                isStart = false;

            }

        }

    }

    IEnumerator Countdown()                        //注意限制只启动一次,无限制重复启动会卡死

    {

        while(count>0)

        {

            print("倒计时:" + count);

            count--;

            yield return new WaitForSeconds(1);

        }

      

    }

    IEnumerator Updates()

    {

        print("执行一次的逻辑");

        yield return new WaitForSeconds(0.5f);     //延迟 0.5f 时间执行 控制刷新间隔

        if (isStart)                               //条件满足继续执行

            StartCoroutine("Updates");

    }

    IEnumerator Translaters()                       //代替Update的协程只能启动一次,注意关闭和跳出条件

    {

        if (Input.GetMouseButtonDown(0))

        {

            print("点击鼠标左键");

        }

        yield return new WaitForFixedUpdate();     //刷新间隔根据物理刷新间隔一致

        yield return Translaters();

    }

    IEnumerator Translaterss()                      //代替Update的协程只能启动一次,注意关闭和跳出条件

    {

        while (true)                                //条件控制

        {

            if (Input.GetMouseButton(0))

            {

                print("点击鼠标左键");

            }

            yield return new WaitForFixedUpdate();

        }

    }

}

图片:协程.png

所有的功能及含义我都有注释,也是怕自己时间长了自己都忘了啥意思了,哈哈,人笨

简单的倒计时我也见的写了下,可以看看,我也是不会,写的有啥问题及时说啊,我一定改

个人风格不一样启动协程的习惯也不一样协程的启动与关闭,感谢CSDN游在雨城的帖子哈哈,溜了溜了

欢迎分享

marvr_ios
论坛版主
论坛版主
  • UID3513
  • 粉丝7
  • 关注1
  • 发帖数122
  • 社区居民
  • 忠实会员
  • 原创写手
沙发#
发布于:2018-01-05 13:29
mark!
开发者
GameTang
骑士
骑士
  • UID4314
  • 粉丝0
  • 关注1
  • 发帖数39
  • 社区居民
板凳#
发布于:2018-01-08 16:27
marvr_ios:mark!回到原帖
这对大神来说小菜一碟吧
游客

返回顶部