unity基础简介(一)
unity是如何跨平台的(附c++和c#编译过程)
前言
游戏引擎为了兼顾易用性和性能,往往使用一种高效率语言编写核心,使用另一种高级语言作为脚本语言,大部分游戏引擎的底层核心由c++编写,unreal使用“U++”作为脚本,unity使用c#作为脚本,当然,使用lua,javascript作为脚本也可以,笔者在学习unity时就疑心作为核心语言的c++和作为脚本语言的c#是如何在一起编译运行的,本文将大致描述关于unity的编译。
c++编译过程*
在聊unity的编译过程之前,我们先来回顾一下c++的编译过程,熟悉可跳过
直接上图
1.预处理(Preprocessing)
读取c源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处理。
伪指令主要包括以下四个方面:
- 宏定义指令,如# define Name TokenString,# undef等。
对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。
- 条件编译指令,如# ifdef,# ifndef,# else,# elif,# endif等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。
- 头文件包含指令,如# include “FileName” 或者# include < FileName> 等。
预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。
- 特殊符号,预编译程序可以识别一些特殊的符号。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。