《Unity3d脚本编程 使用C#语言开发跨平台游戏》读书笔记1

来源:互联网 发布:仿生 知乎 编辑:程序博客网 时间:2024/06/03 11:03
1.4脚本编程的优势


·易于学习,代码维护方便,适合快速开发
·开发成本低(因易于学习,所以可以启用新人,同时开发速度快,这些都是降低成本的方法)


2.2.1以速度作为衡量语言级别的标准,那么语言从低级到高级的大概排名如下


·汇编语言
·C/C++,编译型静态不安全语言
·C#/JAVA,编译型静态安全语言
·Python、Perl、JavaScript,解释型动态安全语言


2.2.2将Mono运行时嵌入应用,可以分为3个步骤


·编译C++程序和链接Mono运行时
·初始化Mono运行时
·C/C++和C#/CIL的交互




2.3


·CIL(Common Intermediate Language,通用中间语言)是CLI(Common Language Infrastructure,通用语言基础架构)标准定义的


一种可读性较低的语言。
·以.net或Mono等实现CLI标准的运行环境为目标的语言要先编译成CIL,然后CIL会被编译,并且以位元码的形式存在(源代码到中间


语言的过程)
·这种位元码运行在虚拟机中(.net Mono的运行时)
·这种位元码可以被进一步编译成不同平台的原生代码(中间语言到原生代码的过程)
·JIT编译,Mono会有一部分代码通过AOT静态编译,以解决在程序运行时JIT动态编译在效率上的问题
·AOT编译,同样使用了JIT编译器在运行前编译
过程:
    收集要被编译的方法
    使用JIT编译器进行编译
    发射(Emitting)经JIT编译过的代码和其它信息
    直接生成文件,或者调用本地汇编器或连接器进行处理后生成文件
Android使用JIT,iOS使用全AOT
·面向对象
·基于堆栈


2.4Unity Script
·静态语言且需要编译
·基于Boo语言
·和JavaScript除了名字以外没有关系
2.4.2Unityscript和JS的区别


3.1C#的类型系统
·静态类型(C#4中引入了动态类型,不影响Unity)
·大多数时候是显式类型的
    由于动态类型并不限制变量使用特定的类型,因而区分显式/隐式类型的不同,仅仅对使用静态类型系统的语言有意义
    var关键字表示编译器在编译时需要对该变量进行类型推断,并不是动态语言的标志
·类型安全
    C#允许将对象转换为它的实际类型或它的任何基类
    不允许的类型转换会触发编译错误,Mono运行时会在程序运行的时候检查类型转换的操作,会抛出异常


3.2值类型和引用类型
·存储引用类型对象的内存空间要从托管堆上分配
·每一个对象都有一些额外的成员为Mono运行时提供操作该对象的信息,因而堆上分配空间时也要考虑到这些成员的空间,同时这些成


员必须被初始化
·对象中的其他字段的字节总是0
·为新对象分配空间时可能会触发GC
·引用类型包括类,接口,委托,Dynamic(U3D中没有),Object,string
·引用类型的实际值只有一个实例,修改后会影响所有引用它的变量


·值类型实例一般分配在线程栈,并且不受GC影响
·值类型的优势在于提升简单类型的性能,缓解托管堆的压力,减少GC次数
·值类型包括简单结构,结构体,枚举
·对结构体使用new并不意味着要从堆上分配内存P71


·总结P72


·内存空间分配位置P67
5 0
原创粉丝点击