当前位置: 首页 > news >正文

编译 Unity 4.3.1 引擎源码(转)

转载自 https://www.cnblogs.com/open-coder/p/12079125.html

引言


Unity 官方从 Unity 2017.1 版本开始,开源了引擎和编辑器的C#源码(源码地址:UnityCsReference),但核心的 C/C++ 部分源码并未开源。

 

编译环境


网上主要的源码有两个版本 Unity 4.3.1f1 和 Unity 4.7.1f1 ,但其实基本都是 4.3.1 的版本,这里以 Unity 4.3 为例进行源码编译,但编译之前需要安装一些工具软件:

  • Visual Studio 2010 (不能使用高版本的 VS 进行源码编译,不然会报错)
  • Visual Studio 2010 SP1
  • Perl (下载安装 ActivePerl 即可)

 

源码包


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 解决方案,右键 生成 ;
image

构建完成后,构建结果在 build/WindowsEditor 目录下,双击 Unity.exe 启动编辑器即可启动编辑器。
image

 

编译时报错解决

  • 依赖库没自动解压:

    在 External 目录下有很多依赖库,有些是以压缩包的形式存在的,但编译的时候可能出现压缩包无法自动解压缩的情况,要么手动解压缩这些包,要么就使用自动化工具批量解压缩,显然后者要靠谱一些,可以避免遗漏。

    其实这些压缩包都是以 builds 命名的,后缀名为 .zip 、.7z 或这 .tar.gz 三种,这里我直接用 QQ 群友写的一个 python 脚本实现解压操作。但是需要安装 7z.exe 并将其配置到系统环境变量中(确保可以在任何目录下通过命令行调用),具体代码如下(例如取名为 unzipExtenalBuilds.py):

# -*- encoding: utf-8 -*-

import os

def unzip():
    for path, dirs, files in os.walk(r"External"):
        dir = os.path.join(path, "builds")
        if os.path.isdir(dir):
            continue
        for ext in [".7z", ".tar.gz", ".zip"]:
            fname = dir + ext
            if os.path.exists(fname):
                cmd = "7z.exe x " + fname + " -o" + dir
                print(cmd)
                os.system(cmd)

if __name__ == "__main__":
    unzip()
将此脚本放在工程根目录下,在命令行执行:

$ python unzipExtenalBuilds.py
解压完成后,再重头走一遍上面的编译步骤。

 

  • 中文系统导致的问题:

当如当前的系统是中文系统,然后在编译时出现很多如下报错:

C2220 警告被视为错误 - 没有生成 "obj" 文件
C4819 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
...
解决方案:

修改 Projects/Jam/Editor.jam 中第 360 行,插入 /wd4819 ,如下:

local vsflags = /WX /wd4251 ;           //修改前
local vsflags = /WX /wd4251 /wd4819 ;   //修改后
 

  • 未安装 VS 2010 SP1 补丁

编译时出现如下报错:

C3861 "_xgetbv" :找不到标识符
这是因为没有安装 Visual Studio 2010 SP1 ,在编译 CPUInfo.cpp 时因找不到 _xgetbv 方法而导致报错。

解决方案:

下载安装 VS10sp1-KB983509.exe 补丁,重新编译即可。

 

启动时报错


启动编译好的编辑器,弹出提示框:
image

Error loading page
SSL peer certificate or SSH remote key was not OK
这是因为许可管理导致的,因为在 Unity 启动时会联网校验许可信息。

解决方案:

  • 方案1:

可以用常用的方法进行破解,例如从 Unity 官网通过上传 Unity_v4.3.1f1.alf 再下载一个 Unity_v4.x.ulf 导入编辑器来激活,然后修改 LicenseManager.cpp 的 1709 行获取失效时间的代码:

std::string stopString = GetDate("StopDate", doc);  // 修改前
std::string stopString = "2112-01-27T08:00:00";     // 修改后
 

  • 方案2:

既然是要研究源码,最好是从源头上解决,打开 Editor/Src/LicenseInfo.cpp ,修改两个地方:

UInt64 LicenseInfo::GetRawFlags ()
{
    // 插入内容 start
    if (m_Tokens == 0)
    {
        m_Tokens = 12345678;
    }
    // 插入内容 end
    return m_Tokens;
}

void LicenseInfo::InitializeProtection()
{
    ...
    int state = m_LicenseManager->Initialize();
    // 插入一行代码代码
    state = kLicenseStatus_Valid;
}
打开 Editor/Src/Application.cpp ,修改方法:

void Application::TickTimer()
{
    // 屏蔽一下两行代码
    //if (m_IsInitialized)
    //  LicenseInfo::Get()->Tick();
    ...
}
修改完这三处之后,重新编译即可。

 

其他

  • 尝试用vs2012编译,编译失败了
  • 用VS2010编译(未安装VS2010 SP1)报了其他与此不同的错误,安装VS2010后编译成功

Ref: https://blog.csdn.net/linshuhe1/article/details/90295325

http://www.jsqmd.com/news/193514/

相关文章:

  • 【PHP微服务熔断机制实战】:掌握高可用系统设计的5大核心策略
  • PHP错误日志看不明白?解读日志结构的8个专业技巧(内部资料流出)
  • 为什么你的PHP应用扛不住百万流量?分库分表+读写分离才是终极解法
  • 2025佛山虫草回收公司TOP5权威推荐:专业靠谱虫草回收服务哪家好? - 工业品网
  • 语音合成灰度生态合作拓展:联合第三方共同推进
  • GLM-TTS参考音频怎么选?高质量音色克隆的7个关键点
  • 语音合成灰度碳足迹测算:评估环境影响并优化
  • 哪个城市,是中国最孤独的城市?
  • 2025年靠谱的品牌策划全案单位推荐:能做全案的品牌策划全案企业有哪些? - 工业品牌热点
  • 语音合成灰度反馈渠道:建立用户意见收集机制
  • GLM-TTS流式推理揭秘:25 tokens/sec实时语音生成的应用场景
  • 2025年靠谱弹簧触指生产厂家排行榜,新测评精选制造加工公司推荐 - 工业推荐榜
  • AbMole丨Sulfasalazine(柳氮磺吡啶):研究铁死亡的重要工具
  • 2025 国产主流机器视觉教育装备有哪些:产教融合赋能人才培养 - 速递信息
  • GLM-TTS在沙漠救援行动中的长距离语音传播优化
  • 2026年木纹不锈钢板批发推荐,316不锈钢板批发公司排名与产品全解析 - myqiye
  • 揭秘PHP在工业数据监控中的应用:如何实现实时统计与异常预警
  • 2026——电子万能试验机行业知名品牌及排名前十有哪些? - 品牌推荐大师1
  • 2025年口碑好的高压反应釜供应商推荐,专业微型反应釜厂家全解析 - 工业品网
  • 网盘直链下载助手搭配GLM-TTS:一键获取并运行语音模型
  • 【Java】【JVM】内存模型
  • 2025预应力双T板厂家权威推荐榜单:高载荷双T板/混凝土双T板/大跨度双T板/抗腐蚀双T板/抗压双T板源头厂家精选。 - 品牌推荐官
  • 2025年专业微博广告企业推荐,微博广告投放效果评估与人群策略全解析 - mypinpai
  • 【资深架构师经验分享】:高并发场景下PHP日志分析的3大陷阱与应对方案
  • 熔断限流实战指南:分布式系统的稳定性守卫
  • 2025年值得推荐的钢格板供应商排名,插接钢格板与制造商推荐全解析 - myqiye
  • GraalVM符合jvm规范吗?
  • 2026年评价高的电池铝托超声波清洗设备,多槽式超声波清洗设备,全自动超声波清洗设备厂家综合实力参考 - 品牌鉴赏师
  • 2025酒店纸杯厂家权威推荐榜单:品尝杯/瓦楞杯/中空杯/防烫纸杯/环保纸杯/隐茶杯及广告纸杯源头厂家精选。 - 品牌推荐官
  • 2025年带压封堵施工公司推荐:带压封堵施工选哪家? - 工业品牌热点