Unity3D学习笔记09:协同

        协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。但在Unity3D中,协同程序并不是真正的线程,协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一 个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。

       概念总是很枯燥的,我们用一个例子来学习协同的使用方法。新建项目,然后添加一个C#脚本,编辑脚本,代码如下:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {

        if (Input.GetKeyDown(KeyCode.Space))
        {
            //开启一个协同
            StartCoroutine("fun");
        }
    
	}
    IEnumerator fun()
    {
        print(Time.time);
        //等待两秒钟
        yield return new WaitForSeconds(2.0f);
        print(Time.time);
    }
}

       代码很简单,只是在Update函数里,当按下空格键时,我们开启一个协同,注意开启协同时用的是StartCoroutine,然后把函数名作为参数,协同程序的返回类型只能为null、等待的帧数(frame)以及等待的时间。所以我们在协同函数里反回等待的时间两秒钟,然后执行下一个print函数,把脚本拖到Camera上,运行,在控制台输出两次打印的时间。


        从图片中看出两个print函数两次打印时间差距大约两秒,所以我们可以用协同函数来实现等待执行某些动作。

        好了,今天就说这么多,项目源码就不贴了。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值