引言Unity 官方从 Unity 2017.1 版本开始,开源了引擎和编辑器的C#源码(源码地址:UnityCsReference),但核心的 C/C++ 部分源码并未开源。
编译环境网上主要的源码有两个版本 Unity 4.3.1f1 和 Unity 4.7.1f1 ,但其实基本都是 4.3.1 的版本,这里以 Unity 4.3 为例进行源码编译,但编译之前需要安装一些工具软件:
源码包Unity4.7.1f1_source_3eo9sdfl01d_final.zip 网上有很多种方式可以获得源码包,而且这些包基本都是 Unity 4.3.1f1 的版本,只是包名改成 4.7 来骗下载量的吧~
编译步骤将源码包放在磁盘根目录下,路径太深可能会出现解压时报错(原因是文件名太长导致的),例如这里我的存放目录为 F:\Unity4.7.1f1_source ; 进入工程目录,双击 jamCreateWorkspace.bat 脚本,执行完毕后在 Projects 目录下会多出一个 JamGenerated 目录;(假如没有此脚本,也可以使用在当前目录下使用命令行执行 perl build.pl --prepare 来生成); 然后使用 VS 打开 Projects/JameGenerated/_workspace.vs2010_/AllTarget.sln ,在解决方案资源管理器中选中 Editor 解决方案,右键 生成 ; 构建完成后,构建结果在 build/WindowsEditor 目录下,双击 Unity.exe 启动编辑器即可启动编辑器。
编译时报错解决
在 External 目录下有很多依赖库,有些是以压缩包的形式存在的,但编译的时候可能出现压缩包无法自动解压缩的情况,要么手动解压缩这些包,要么就使用自动化工具批量解压缩,显然后者要靠谱一些,可以避免遗漏。 其实这些压缩包都是以 builds 命名的,后缀名为 .zip 、.7z 或这 .tar.gz 三种,这里我直接用 QQ 群友写的一个 python 脚本实现解压操作。但是需要安装 7z.exe 并将其配置到系统环境变量中(确保可以在任何目录下通过命令行调用),具体代码如下(例如取名为 unzipExtenalBuilds.py): # -*- encoding: utf-8 -*- $ python unzipExtenalBuilds.py
当如当前的系统是中文系统,然后在编译时出现很多如下报错: C2220 警告被视为错误 - 没有生成 "obj" 文件 修改 Projects/Jam/Editor.jam 中第 360 行,插入 /wd4819 ,如下: local vsflags = /WX /wd4251 ; //修改前
编译时出现如下报错: C3861 "_xgetbv" :找不到标识符 解决方案: 下载安装 VS10sp1-KB983509.exe 补丁,重新编译即可。
启动时报错Error loading page 解决方案:
可以用常用的方法进行破解,例如从 Unity 官网通过上传 Unity_v4.3.1f1.alf 再下载一个 Unity_v4.x.ulf 导入编辑器来激活,然后修改 LicenseManager.cpp 的 1709 行获取失效时间的代码: std::string stopString = GetDate("StopDate", doc); // 修改前
既然是要研究源码,最好是从源头上解决,打开 Editor/Src/LicenseInfo.cpp ,修改两个地方: UInt64 LicenseInfo::GetRawFlags () void Application::TickTimer()
其他
|
|
来自: 勤奋不止 > 《游戏引擎unity》