Unity3D__协同程序

废话不多说直接上代码

using UnityEngine;
using System.Collections;

public class CoroutineDemos : MonoBehaviour {

    public Transform targetts;

    public bool kisPress = false;

    public bool isMoreOnePositon = false;
    public bool isLessOnePositon = false;
    // Use this for initialization
    void Start () {

    }

    public void BtnKeyCheck()
    {
      StartCoroutine( KeyCheck(KeyCode.A) );
    }

    public void CheckPos()
    {
        StartCoroutine( CheckTransform( targetts ) );
    }

    public void CheckPosTwo()
    {
        StartCoroutine( CheckTransformTwo( targetts ) );
    }
    IEnumerator  KeyCheck(KeyCode code)
    {

        while(!kisPress)
        {
            if(Input.GetKeyUp(code) )
            {
                StartGame();
                break;
            }
            yield return null;
        }
        Debug.Log("Game is end");
    }

    void StartGame(){
       kisPress = true;
        print("StartGame!!!!!!!!!!!!!!!!!!!");
    }

    IEnumerator  CheckTransform(Transform t)
    {

        while(!isMoreOnePositon)
        {
            if(t.position.x <0.2 )
            {
                NewPosition();
                break;
            }
            yield return null;
        }
        Debug.Log("CheckTransform is end");
        isMoreOnePositon = false;
    }

    void NewPosition()
    {
        isMoreOnePositon = true;
        print( targetts.position.x +"--NewPosition!!!!!!!!!!!!!!!!!!!" );
    }

    IEnumerator  CheckTransformTwo(Transform t)
    {

        while(! isLessOnePositon )
        {
            if(t.position.x >4.9 )
            {
                NewPositionTwo();
                break;
            }
            yield return null;
        }
        Debug.Log("CheckTransformTwo is end");
        isLessOnePositon = false;
    }

    void NewPositionTwo()
    {
        isLessOnePositon = true;
        print( targetts.position.x +"--NewPositionTwo!!!!!!!!!!!!!!!!!!!" );
    }
}

一个共有三个协同程序

一个用来检测用户按了键盘上的A键事件

另外两个分别检测 Cube对象 的 X坐标 大于4.9 或者 小于 0.2 的事件

分别给予三个按钮点击事件

协同程序入迷,如有错误,欢迎指正,谢谢!

时间: 2024-10-29 06:22:59

Unity3D__协同程序的相关文章

【转】Unity中的协同程序-使用Promise进行封装(一)

原文:http://gad.qq.com/program/translateview/7170767 译者:陈敬凤(nunu)    审校:王磊(未来的未来) 每个Unity的开发者应该都对协同程序非常的熟悉.对于很多Unity的开发者而言,协同程序就是用来编写大量异步和延时任务的一种方法.如果你不在乎速度的话,有非常非常多的特殊方法可以在任何所需的时间暂停和恢复执行.在实践中,它们可以营造一种并发函数的幻觉 (虽然他们与线程无关!).然而,协同程序会有一些问题,许多程序员在使用协同程序的时候会

Lua学习笔记之协同程序

1.  协同程序与多线程情况下的线程比较类似,有自己的堆栈.自己的局部变量,有自己的指令指针,但是和其他协同程序共享全局变量等很多信息.线程和协同程序的主要不同在于:在多核处理器情况下,多线程程序同时运行多个线程,而协同程序是通过协作来完成,在任意指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才被挂起. 2.  协同的基础 Lua通过table提供了所有的协同函数,create函数创建一个新的协同程序,create只有一个参数,协同程序将要运行的代码封装而

Lua之协同程序(coroutine)

什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西. 协同是非常强大的功能,但是用起来也很复杂. 线程和协同程序区别 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行. 在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起. 协同程序有点类似同步的多线程,在

四、Lua协同程序

一.协同程序基础 1.什么是协同程序 协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针(即可以保存变量的值和状态),同时又与其他协同程序共享全局变量和其他大部分东西. 与线程的区别是具有多个线程的程序可以同时运行几个线程,而程序任意时刻只能运行一个协同程序,并且协同程序只有被显示地(执行挂起函数)要求挂起才会暂停. 2.四种状态 (1)挂起(suspended):创建时或执行了操作coroutine.yield() (2)运行(running):执行了corouti

chapter9_3 协同程序实现迭代器

将循环迭代器视为"生产者-消费者"模式的一种特例:迭代器产生的数据供循环体消费. 因此,用协同程序写迭代器就理所当然了.因为协同程序可以一改传统调用者与被调用者之间的关系. 有了这个特性,在写迭代器时就无须顾及如何在每次成功的迭代调用间保持状态了. function permgen(a,n) n = n or #a --默认的n是数组a的大小 if n <= 1 then --只有一个元素,不需要排列 printresult(a) else for i = 1,n do a[n]

Lua中的协同程序 coroutine

Lua中的协程和多线程很相似,每一个协程有自己的堆栈,自己的局部变量,可以通过yield-resume实现在协程间的切换.不同之处是:Lua协程是非抢占式的多线程,必须手动在不同的协程间切换,且同一时刻只能有一个协程在运行.并且Lua中的协程无法在外部将其停止,而且有可能导致程序阻塞. 协同程序(Coroutine): 三个状态:suspended(挂起,协同刚创建完成时或者yield之后).running(运行).dead(函数走完后的状态,这时候不能再重新resume). coroutine

《Lua程序设计》9.3 以协同程序实现迭代器 学习笔记

例:编写一个迭代器,使其可以遍历某个数组的所有排列组合形式.代码如下: function permgen(a, n) n = n or #a -- 默认n为a的大小 if n <= 1 then -- 还需要改变吗? printResult(a) else for i=1,n do -- 将第一个元素放到数组末尾 a[n], a[i] = a[i], a[n] -- 生成其余元素的排列 permgen(a, n-1) -- 恢复第i个元素 a[n], a[i] = a[i], a[n] end

Lua语言基础汇总(7) -- 协同程序

前言 协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西.从概念上讲,线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行.就是说,一个具有多个协同程序的程序在任意时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显式地要求挂起时,它的执行才会暂停. 协同程序基础 Lua将所有关于协同程序的函数放置在一个名为“coroutine”的table中.函数create

Lua中的协同程序 coroutine(转)

Lua中的协程和多线程很相似,每一个协程有自己的堆栈,自己的局部变量,可以通过yield-resume实现在协程间的切换.不同之处是:Lua协程是非抢占式的多线程,必须手动在不同的协程间切换,且同一时刻只能有一个协程在运行.并且Lua中的协程无法在外部将其停止,而且有可能导致程序阻塞. 协同程序(Coroutine): 三个状态:suspended(挂起,协同刚创建完成时或者yield之后).running(运行).dead(函数走完后的状态,这时候不能再重新resume). coroutine