在MonoBehavior类中有一个方法是StartCoroutine。里面要求的是一个接口为IEnumerator协同的返回值,

在Unity3d中,协同的作用是马上返回结果的。而不影响其它程序的运行,并非一直在等待协同的结果返回

你能够在协同程序内使用yiled来等待当前的程序运行完成。

然后再往程序的以下的代码运行。

使用协同的优点不是堵塞游戏线程的运行,可以让游戏流畅。

使用弱连网的游戏,我简易的封装了一个工具类,这样非常方便的进行网络数据的处理,

思路是一个半单例的模式,对外不开放,对本类进行对象创建。一个静态工厂方法+单例。

当然,里面还有非常多不足。对于一般的弱连网的游戏来说。已经够用了

using UnityEngine;
using System.Collections; public class Task { // 任务的优生等级
enum Advance {
Low = -1,
Normal,
Advance
} // 任务的类型
enum TaskType {
Netwowk = -77,
Local,
Message
} /// <summary>
/// 当前任务列表,任务的读取形式是先进后出
/// </summary>
BetterList<Task> ts; /// <summary>
/// 任务的单例
/// </summary>
private static Task instance;
public static Task Instance {
get
{
if(instance == null) {
instance = new Task();
}
return instance;
}
} public void StopIEnumerator () {
if (instance != null) {
instance = null;
ts = null;
}
} private Task () {
ts = new BetterList<Task> ();
ts.Clear ();
} /// <summary>
/// Initializes a new instance of the <see cref="Task"/> class.
/// </summary>
/// <param name="id">Identifier.</param>
/// <param name="param">Parameter.</param>
private Task(int id, object param) {
this.id = id;
this.param = param;
} /// <summary>
/// Creates the new task.
/// </summary>
/// <returns><c>true</c>, if new task was created, <c>false</c> otherwise.</returns>
/// <param name="id">Identifier.</param>
/// <param name="param">Parameter.</param>
public bool CreateNewTask(int id, object param) {
Task t = new Task (id, param);
ts.Add (t); return true;
} /// <summary>
/// The identifier.
/// </summary>
public int id; /// <summary>
/// The parameter.
/// </summary>
public object param; void addTask(Task t) {
if (t.id > 0) {
ts.Add (t);
}
} public IEnumerator doTask() { Debug.Log ("Size:" + ts.size);
//Debug.Log (RealTime.time);
if(ts.size > 0) { Task t = ts.Pop(); switch (t.id) {
case 77:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
WWW www = new WWW("http://www.baidu.com");
yield return www;
//网络请求完毕后进行数据的分发
Debug.Log("www" + www.text);
// NGUITools.Broadcast();-> LocalDispatch
break;
case 88:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
break;
case 99:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
break;
default:
break; } // 不断的读取当前任务,直接任务所有完毕
//if(ts.size > 0) {
// Debug.Log("doTask");
// doTask();
//}
} //else {
// 当前没有任务时。等待3.5s
Debug.Log (RealTime.time);
//yield return new WaitForSeconds (3.5f);
//doTask();
//}
} }

这样,在须要有网络请求的地方。创建当前一实例,然后再创建一个新任务。启动unity3d的loop,

不断的读取任务。能够设定一个固定时间来读取任务



Unity3d 面向对象设计思想(六)(Unity3d网络异步数据)的更多相关文章

  1. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  2. python 面向对象设计思想发展史

    这篇主要说的是程序设计思想发展历史,分为概述和详细发展历史 一,概述 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的 指令和数 据.简单来 ...

  3. 面向对象设计思想和MVC设计模式

    虽然之前学习Java时有接触过面向对象的设计思想,但因当时Java没学好.所以导致这两天讲php的面向对象设计时,感到没有头绪,这也反应了我练习少和逻辑能力的不足.而MVC设计思想 面向对象就是要将系 ...

  4. linux VFS 之一 :虚拟文件系统的面向对象设计思想

    VFS的面向对象的思想,如下图: VFS在上层用户空间的进程与底层特定文件系统之间起到一个承上启下的作用, 对上:封装标准的系统调用接口给用户空间app,user space app不必关心特定文件系 ...

  5. Effective C++ —— 继承与面向对象设计(六)

    条款32 : 确定你的public继承塑模出is-a关系 以C++进行面向对象编程,最重要的一个规则是:public inheritance(公开继承)意味“is-a”(是一种)的关系.请务必牢记.当 ...

  6. 一、利用Python编写飞机大战游戏-面向对象设计思想

    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...

  7. [转载]面向对象设计(OOD)思想(C#)

    有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...

  8. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  9. Unity3D架构设计NavMesh寻路

    Unity3D架构设计NavMesh寻路 发表于2013年10月6日由陆泽西 国庆闲来没事把NavMesh巩固一下.以Unity3D引擎为例写一个底层c# NavMesh寻路.因为Unity3D中本身 ...

随机推荐

  1. CCNA2.0笔记_动态路由

    动态路由协议: 向其他路由器传递路由信息 接收(学习)其他路由器的路由信息 根据收到的路由信息计算出到每个目的网络的最优路径,并由此生成并维护路由表 根据网络拓朴变化及时调整路由表,同时向其他路由器宣 ...

  2. Fly (From Wikipedia)

    True flies are insects of the order Diptera, the name being derived from the Greek δι- di- "two ...

  3. C# 个人疏漏整理

    1.dynamic和var不能混为一谈. var声明局部变量只是一种简化语法,var要求编译器根据之后的表达式推断具体的数据类型. var只能用于声明方法内部的局部变量,dynamic则可用于局部变量 ...

  4. C语言 函数指针三(反向调用)

    动态库代码 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib. ...

  5. Java 还是 C++?

    Java 特别象 C++:由此很自然地会得出一个结论:C++似乎会被Java 取代.但我对这个逻辑存有一些疑问. 无论如何,C++仍有一些特性是Java 没有的.而且尽管已有大量保证,声称Java有一 ...

  6. noip 模拟赛 After 17(递推+特殊的技巧)

    来源:Violet_II T1 好神的一题,我竟然没做出来QAQ 首先我们发现,答案是sigma(x[i]*x[j], i>j)+sigma(y[i]*y[j], i>j).显然只需要讨论 ...

  7. 【BZOJ】2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2101 这个dp真是神思想orz 设状态f[i, j]表示i-j先手所拿最大值,注意,是先手 所以转移 ...

  8. json DateTime转换

    前台: function ChangeDateFormat(jsondate) { jsondate = jsondate.replace("/Date(", "&quo ...

  9. Wise 打包细节

    细节 说明 添加卸载快捷方式 缺省的安装程序快捷方式中没有卸载项:只能通过控制面板删除,或者主程序目录下的UnWise.exe来卸载.实际上,该文件就可以作为卸载程序. 可以复制一个快捷方式,将程序名 ...

  10. leetcode-happy number implemented in python

    视频分析: http://v.youku.com/v_show/id_XMTMyODkyNDA0MA==.html?from=y1.7-1.2 class Solution(object): def ...