应用的引擎由富有经验的开发人员使用C/C++开发,而一些具体项目中功能的实现则使用高级语言开发。

文章目录

  • 前言
    • 1. Mono是什么
    • 2. Mono和脚本
    • 3. 跨平台和CIL
    • 4. C#和UnityScript
  • 总结

前言

本篇是针对《Unity3D脚本编程——使用C#语言开发跨平台游戏》一书 第2章节《Mono所搭建的脚本核心基础》 的读书笔记,记录了其中一些基础知识、核心要点以及一些有趣的信息。
本章节的核心内容在于剖析Unity3D的脚本基础所依赖的.NET环境,即Mono运行时,介绍其是为什么,以及在Unity3D脚本编程中扮演什么样的角色。本章节并没有涉及到编写脚本程序的内容,更多的,是介绍脚本引擎的特性。


1. Mono是什么

Mono是Xararin公司所赞助的开源项目,是微软.NET框架的另一种实现(是.NET框架在不同平台上的补充),同时它具备了跨平台的能力。

  • Mono 1.0(2004) Linux桌面应用程序开发者平台

Mono的组件:

  • C#编译器 mcs
  • Mono运行时 提供一个即时编译器(Just-in-time,JIT),一个提前编译器(Ahead-of-time,AOT),还有类库加载器、垃圾回收器(运行时会追踪目标对象,并且自行决定是否回收对象的内存)和线程系统等
  • 基础类库 同时兼容微软的.NET框架
  • Mono类库

其中,C#编译器mcs将C#编译为CIL的字节码(byte code),然后Mono运行时中的编译器将CIL的字节码转译为原生码(native code),共有3种转译方式:

  • 即时编译(JIT) 在程序运行过程中将CIL的字节码转译为目标平台的原生码
  • 提前编译(AOT) 在程序运行之前将执行程序或动态链接库的CIL字节码转译为目标平台的原生码并存储起来(仍会有需要用JIT转译的部分)
  • 完全静态编译(Full-ahead-of-time,Full-AOT) 在程序运行之前所有的代码就已经编译成目标平台的原生码(如针对iOS平台)

2. Mono和脚本

语言从低级到高级的大概排名:

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

Mono运行时嵌入到应用后,得到一个完整的虚拟机运行环境。

托管代码 通过CIL编译器生成的CIL代码

总结来说,Mono运行时去支撑脚本架构的基础主要体现在两点上:在C#中调用C++中的方法,以及在C++中调用C#中实现的方法。如此,脚本层面可以调用引擎底层提供的方法,而引擎可以通过句柄的方式解读脚本代码。

3. 跨平台和CIL

跨平台的核心原理——中间层过渡转换,对应到Unity3D,就是CIL代码指令集。

CIL的特性 可以运行在所有支持CLI(Common Language Infrastructure,通用语言基础结构)的环境中,从而实现了平台无关(或CPU无关)

源代码——中间语言——虚拟机——原生代码

4. C#和UnityScript

脚本语言的选择,本质上是对脚本编译器(可以把相应脚本编译为CIL)的选择。

C#和UnityScript是存在效率差异的,其根源主要在于二者经过编译器生成的CIL中间语言并不是完全一致的,主要是一些语言细节上的处理的差异,进而会导致一些影响效率的操作(如装箱拆箱等)。


总结

本章着力于阐述Mono运行时以及其在串联低级语言和高级语言时的作用,涉及到的内容艰深晦涩,但好在其中的过程相对比较清晰,需要始终抓住一个核心原理:CIL的多平台支持性。CIL就好像一个转接头,我们需要想办法把代码流进去,而它自然会为你转接到各种各样的设备。

Unity3D脚本编程读书笔记——第2章 Mono脚本核心基础相关推荐

  1. linux多线程服务端编程读书笔记——第三章

    本章作者主要是总结了一两种常用的线程模型.归纳了进程通信与线程同步的最佳实践 进程与线程的区别: 进程是文件系统中的最重要的两个概念之一(令一个是文件).简单地说,一个进程是内存中正在运行的程序.每个 ...

  2. Entity Framework 4 in Action读书笔记——第三章:查询对象模型基础(1)

    本章要点: 1.EF查询技术. 2.捕捉生成的SQL. 3.深入理解EF查询引擎. 4.常见的查询陷阱. 一.查询引擎入口点 对象服务层最重要的类是ObjectContext.在你的代码中它是最有用的 ...

  3. 《Java编程思想》读书笔记 第十三章 字符串

    <Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...

  4. Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

    Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用 ...

  5. Java 核心技术卷 II(第 8 版) – 读书笔记 – 第 1 章(下)

    22.一旦获得了一个 Charset,就可以在 Java 的 Unicode 和指定的编码格式之间进行转化,下面以 GBK 和 Unicode 之间做为例子. 从 Unicode 到 GBK: imp ...

  6. 《Spring实战》读书笔记-第4章 面向切面的Spring

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  7. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

  8. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  9. 《汇编语言》- 读书笔记 - 第1章-基础知识

    <汇编语言>- 读书笔记 - 第1章-基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储 ...

  10. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

最新文章

  1. 标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)
  2. java.sql.sqlexception: 无效的名称模式:_PSQLException:错误:关系&ldquo; TABLE_NAME&rdquo;不存在...
  3. Map与object的区别
  4. Samba服务器(一):windows访问samba服务器共享文件的简单实现(图文并茂)
  5. java synchronized 静态_Java之Synchronized修饰实例方法和静态方法
  6. java时间格式转换_Java时间日期格式转换
  7. 光信噪比 (OSNR) 的概念及其重要性
  8. SUSE Enterprise Server 12 SP3 64 设置防火墙开放8080端口
  9. [560]python简单验证文本的Zipf分布
  10. android6 存储卡异常,手机SD卡无法读取时,如何在手机上修复损坏的SD卡?
  11. 问题 B: 栈的操作问题
  12. 碧蓝航线最新服务器2018,2018最新碧蓝航线建造时间表 舰娘建造时间表一览
  13. 蓝牙BQB认证RF射频测试
  14. U盘变32G的解决办法
  15. uni-app/js/小程序/生成支付二维码图片,类似于支付宝和微信商家码
  16. java jacob api_jacob使用入门 | 学步园
  17. 四平方和定理(拉格朗日定理)
  18. Unity安卓Android平台StreamingAssets下文件的读取
  19. Build file: no target in no project
  20. ChatGPT版必应疑似「发疯」?微软紧急限制回答数目

热门文章

  1. 5.1声道测试文件下载
  2. java加水印 盖章_如何通过Java加水印的方式实现一键添加校徽外圈
  3. PASCAL程序设计语言 PDF 分享
  4. 邮件服务器 文件服务器,搭建邮件、终端和文件服务器应用方案
  5. 电脑突然显示只有C盘,其他磁盘不显示了----解决方法(很简单)
  6. 安装PyQt5安装包或者其他操作,报错Failed to execute script pyi_rth_multiprocessing,解决办法
  7. win10背景色改成豆沙绿,解决锁屏后失效方法
  8. 测试工程师必备小工具指南
  9. 归并排序 java_Java实现归并排序
  10. 高清人脸数据集—FFHQ