实现一个Unity3d的WaitForSeconds
来源:互联网 发布:ftp服务器端口默认为 编辑:程序博客网 时间:2024/05/01 23:42
这篇文章写在最新一段时间对协程的思考。
我们知道在Unity3d里面调用StartCoroutine之后,会开启一个协程,参数是一个IEnumerator。
协程可以在程序运行之后的某一个时间点执行我们的代码,那跟IEnumerator又有什么关系呢,IEnumerator有两个方法,一个是MoveNext,一个是Current。当你定义一个IEnumerator 函数的时候,你必须在函数里面使用yiled return 语句。可以这么想,每一个yiled return语句 就相当于把 这一段程序段 加入到一个执行队列。Unity判断这段程序的执行条件成熟的时候,就调用IEnumerator的MoveNext,然后取出它的Current,这个Current就是当前的程序片段。然后执行它。为了加深对它的理解,写了一个小程序来解释它。
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class CoroutineItem{ public DateTime endDate; public IEnumerator enumarator;}public class WaitForSeconds1{ public float Seconds { get; set; } public WaitForSeconds1(float fSeconds) { Seconds = fSeconds; }}public class NewBehaviourScript : MonoBehaviour { void Start () { StartCoroutine1(testWaitForSeconds1()); } void LateUpdate() { m_lstCoroutine.ForEach((item) => { if (item.endDate < DateTime.Now) { ExcuteCoroutine(item.enumarator, ref item); } }); m_lstCoroutine.RemoveAll(m=>m.endDate < DateTime.Now); } IEnumerator testWaitForSeconds1() { int i = 0; while (i < 10) { yield return new WaitForSeconds1(1); Debug.LogWarning(i++); } } List<CoroutineItem> m_lstCoroutine = new List<CoroutineItem>(); void StartCoroutine1(IEnumerator j) { CoroutineItem item = new CoroutineItem(); ExcuteCoroutine(j, ref item); if (item.endDate > DateTime.Now) { m_lstCoroutine.Add(item); } } bool ExcuteCoroutine(IEnumerator enumator, ref CoroutineItem item) { item.endDate = DateTime.MinValue; if (enumator.MoveNext()) { if (enumator.Current is WaitForSeconds1) { item.endDate = DateTime.Now.AddSeconds(((WaitForSeconds1)(enumator.Current)).Seconds); item.enumarator = enumator; } return true; } return false; }}
0 0
- 实现一个Unity3d的WaitForSeconds
- unity3d之 C# WaitFOrSeconds()
- unity3d之 C# WaitFOrSeconds()
- 【Unity】理解协程的原理1——实现一个自己的WaitForSeconds
- Unity3D实现的一个简单的展示系统
- 关于unity中C#使用WaitForSeconds的方法
- 在unity3d中实现求一个三角形的外接圆
- Unity3d学习笔记(2)--一个太阳系的实现
- [Unity3D 版本5.X]实现一个自由漫游的摄像机
- Unity3D 粒子系统实现一个简单的爆炸效果
- unity waitforseconds
- 一个unity3d的博客
- Unity3D的一个坑
- unity3d 单选框的实现
- 一个unity3d 的Tutorial,Runner
- unity3d monobehaviour的一个bug
- unity3d实现一个魔方旋转展示
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- Table被web编程弃用的原因
- nodejs自动化环境搭建
- jQuery表单验证Validata
- 当Culture遇上DateTimeFormat
- 面向对象程序设计(1)-OOP概述
- 实现一个Unity3d的WaitForSeconds
- HDU 1232 畅通工程
- 全世界只有我们Erlang程序员是正确的
- Hadoop学习之HBase入门
- ProtoBuf在Unity3D中的简单使用!
- POJ 3669 小坑
- ActiveMQ——消息队列基础篇
- c++ map
- openssl基本原理 + 生成证书 + 使用实例