Unity3D引擎简介
Unity3D优势:
全平台,游戏制作完毕后不用太考虑移植问题
C#语言,强大的表现力,丰富的类库,良好的工程性和运行时表现
同时支持3D和2D
闭源,让开发者专注于业务领域开发
流行,会的人多,文档、社区、第三方库、工具、人才等都很活跃
.net简介
.net/CLR与Java/JRE具有相似性
IL和Java字节码具有相似性,IL层提供了跨平台的可行性。Java字节码在最初设计时主要针对的是解释执行,而IL在设计时考虑的是运行时动态编译(JIT)再执行,具备了更好的性能
.net是框架,而C#仅仅是这个框架下的一门语言,C#并不能代表整个.net族群。目前.net已经支持40+种语言,而因为有IL的存在,这些语言之间均可良好的相互调用!常用的有:C#、VB.net、C++/CLI、F#等
Mono != Microsoft .net
Mono为.net跨平台非官方版的CLR引擎,和官方的运行时基本等价但也确实存在若干兼容性问题。
能在CLR上运行的程序直接拿到Mono下不一定能跑,当然只用常规组件的一般不会出现移植问题。
Unity Mono != Mono
Unity所用的Mono是基于Mono较早期版本的一个定制版
Mono中支持的特性到Unity中因为跨平台和安全需要等原因不一定会被良好支持,以实测为准。
力与美的平衡
Unity引擎本身是用C++实现的,提供了对操作系统底层充分的访问,保证了运行时性能。
上层充分运用了Mono良好的.net互操作性,提供了基于.net的大量接口,让上层运用C#、js等语言进行方便快捷的开发成为可能!
cocos2d-x提供对lua、js、java等语言的支持也可能是基于同样的考虑。
让上层业务逻辑开发尽可能保持简单高效是目前游戏引擎发展的方向。
System.Object / UnityEngine.Object / UnityEngine.GameObject
System.Object等价与C#中的object关键字,是所有.net类型的最基础父类
UnityEngine.Object是Unity引擎接口中所有类型的基础父类,协调底层C++对象和上层.net对象之间的生命期
UnityEngine.GameObject是所有Unity场景对象的基础父类,也是其模块化组件式结构的关键宿主对象
UnityEngine.Component / UnityEngine.GameObject
所有的业务逻辑不再采用继承的方式实现,而是作为单独的Component插接到GameObject,然后所有的GameObject再被组织到场景图中
MonoBehaviour是Component中最常用的类型,所有的脚本必须继承自该类
脚本:
所有脚本都必须继承自MonoBehaviour。MonoBehaviour提供了大量Messages接口可供“重写”,并会在相应的时机自动调用
脚本中的public字段可被自动显示到Unity编辑器窗口,private的不可以,属性不可以。当然这在某种程度上破坏了程序的封装性,需要仔细规划。详细规则可参阅:Script Serialization
协程:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
IEnumerator Start() {
StartCoroutine("DoSomething", 2.0F);
yield return new WaitForSeconds(1);
StopCoroutine("DoSomething");
}
IEnumerator DoSomething(float someParameter) {
while (true) {
print("DoSomething Loop");
yield return null;
}
}
}
评论