澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 澳门在线威尼斯官方Unity3D协同程序,应该掌握的

原标题:澳门在线威尼斯官方Unity3D协同程序,应该掌握的

浏览次数:115 时间:2020-01-01

随着培训机构的增多,越来越多的人进入IT行业。那么对于我们这些自学出来,经验不够丰富的转行者来说,我们需要掌握最起码的一些东西,这对于面试很有用,而且在工作中也很常用。本人在学习了网上各位大神关于一些知识点的总结和研究后,总结了这么一套东西。祝大家都能工作顺利,找到自己满意的工作。

1. 什么是协同程序

  1. 重载和重写

在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。

重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。

2. 协同程序的开启与终止

重载:一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在 MonoBehaviour 或继承于MonoBehaviour的类中调用。

  1. 面向对象

在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以开启一个线程。区别在于使用字符串作为参数可以开启线程并在线程结束前终止线程,相反使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法);另外使用字符串作为参数时,开启线程时最多只能传递 一个参数,并且性能消耗会更大一点,而使用IEnumerator 作为参数则没有这个限制。

封装:那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作

在Unity3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该 MonoBehaviour中的协同程序。

继承:

还有一种方法可以终止协同程序,即将协同程序所在gameobject的active属性设置为false,当再次设置active为ture时,协同程序并不会再开启;如是将协同程序所在脚本的enabled设置为false则不会生效。这是因为协同程序被开启后作为一个线程在运行,而 MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中有调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线 程。然而,为了管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样我们在编程时就可以方便的调用指定脚本 中的协同程序,而不是无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计保证了对象、脚本的条理化管理,并防止了重 名。

实例化:

3. 协同程序的输入、输出类型

      (1)、先父类后子类,先静态后成员;

协同程序的返回类型为Coroutine类型。在Unity3D中,Coroutine类继承于YieldInstruction,所以,协同程序的返回类型只能为null、等待的帧数(frame)以及等待的时间。

           实例化的时候先调用父类的静态构造快,在调用父类的构造方法,然后子类的构造块,在调用子类的构造方法;

协同程序的参数不能指定ref、out参数。但是,我们在使用WWW类时会经常使用到协同程序,由于在协同程序中不能传递参数地址(引用),也不能输出对 象,这使得每下载一个WWW对象都得重写一个协同程序,解决这个问题的方法是建立一个基于WWW的类,并实现一个下载方法。如下:

(2) 、默认调用父类空构造;

usingUnityEngine;

重写  override

usingSystem.Collections;

      (1)、重写与重载:

public class WWWObject:MonoBehaviour

           重写:继承的子类中,方法签名相同( 方法名+形参个数 类型 顺序  )

{

           重载:同一个类 方法名相同 ,形参个数 类型 顺序 不同

public WWW www;

      (2)、重写规则:在子类中签名与父类中相同,在合理范围内提高子类可见性;

public WWWObject(string url)

         A、返回类型:基本类型和void必须相同;引用类型要<=父类的返回类

{

         B、异常:

if(GameVar.wwwCache)

         C、可见性:要大于或等于父类中被重写的方法

www = WWW.LoadFromCacheOrDownload(url,GameVar.version);

多态:

else

 有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法。

www =new WWW(url);

同样一个方法,子类都有不同的实现方式,这个就是多态了,多态有助于程序的灵活性。

}

子类中如果重写了父类的方法(多态),那么父类中的这个方法将不会再调用。

public IEnumerator Load()

编译时多态:其实就是重载,是对非虚成员来说的,系统在编译时,根据不同签名来决定实现何种操作。

{

运行时多态:也就是重写,是通过虚成员实现的,指直到系统运行时,才根据实际情况决定实现何种操作。

Debug.Log("Start loading : "+www.url);

第二种情况是在继承的基础上实现的,子类继承基类时,通过对虚成员的重写,然后利用基类引用子类对象,那么不同的子类对象实现相应的不同操作。

while(!www.isDone)

这样的好处是显而易见的,利用基类类型定义一次,然后给它传入不同的子类对象,然后实现不同的操作,提高了效率。

{

3.值类型和引用类型

if(GameVar.gameState ==GameState.Jumping||GameVar.gameState ==GameState.JumpingAsync)

值类型:

byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。

引用类型:

string 和 class统称为引用类型。

LoadScene.progress =www.progress;

1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的

yield return 1;

是堆中存放的地址。

}

2.值类型存取快,引用类型存取慢。

if(www.error!=null)

3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。

Debug.LogError("Loading error : "+www.url+"n"+www.error);

4.栈的内存是自动释放的,堆内存是.NET 中会由 GC 来自动释放。

else

5.值类型继承自 System.ValueType,引用类型继承自 System.Object。

Debug.Log("End loading : "+www.url);

4.数据结构

}

数组Array:连续存储  
数组是最简单的数据结构。其具有如下特点:
数组存储在连续的内存上。
数组的内容都是相同类型。
数组可以直接通过下标访问。

public IEnumerator LoadWithTip(string resourcesName)

int size = 5;
int[] test = new int[size];

{

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:澳门在线威尼斯官方Unity3D协同程序,应该掌握的

关键词:

上一篇:没有了

下一篇:没有了