游戏构建:Unity 构建(三):Scriptable Build Pipeline——用最小改动,换最大缓存提升
1、那个让构建时间砍半的东西 上一篇我们讲了 AssetBundle 的两代接口演进——从第 0 代「手写代码收集资源、不自动处理依赖」,到第 1 代的两条路线(标记包名 / AssetBundleBuild[] 代码定义分包)。 虽然第 1 代的 BuildAssetBundles 解决了依赖处理的可靠性问题,但它有两个硬伤。第一,增量构建的效率...
一个开发出身的DevOps工程师 · 代码有理性,文章有温度
1、那个让构建时间砍半的东西 上一篇我们讲了 AssetBundle 的两代接口演进——从第 0 代「手写代码收集资源、不自动处理依赖」,到第 1 代的两条路线(标记包名 / AssetBundleBuild[] 代码定义分包)。 虽然第 1 代的 BuildAssetBundles 解决了依赖处理的可靠性问题,但它有两个硬伤。第一,增量构建的效率...
1、没有 AssetBundle 的日子 在讲 AssetBundle 的接口演进之前,先想象一下:如果 Unity 没有资源动态加载机制,游戏怎么做? 答案很简单——把所有资源都放在工程里,构建时全部打进安装包。 这听起来好像也没啥?但你想一个真实手游,场景几十个,角色几十个,每个角色几张贴图、一个模型、好几套动画……光是贴图可能就几百上千张。...
1、一个按钮引发的困惑 刚接触 Unity 构建的时候,我的心态是这样的: 之前用 Java 做了十年开发,构建就是 mvn clean package 或者 ./gradlew build。我知道编译器在干什么——.java 编译成 .class,打包成 .jar,完事。 打开 Unity,看到 File → Build Settings,里面...
1、换了个行业,换了对「构建」的理解 去年我换工作了。 从互联网行业跳到了游戏行业。开发语言从 Java 换成了 C# 和 C++。IDE 从 IntelliJ IDEA 换成了 Rider 和 Visual Studio。 坦白说,技术栈的切换比想象中顺利——毕竟编程语言说到底都是相通的。但有一个东西,让我结结实实地震惊了一下。 构建系统。 ...
1、先讲个故事 有个人想煮一碗面。 第一次,他烧了水、切了菜、下了面、调了酱。每一步都自己动手。这像手敲 gcc 命令。 后来他把步骤写在了便签上,每次照着做。这像写了个 shell 脚本。 再后来他发现,如果菜已经切好了,就不需要重新切。于是他在便签上加了判断。这像Makefile。 再后来他请了个厨师,只需要告诉厨师「我想吃面...
1、CMake 还不够好吗? 我们已经花了五篇文章学 CMake——从入门到现代写法,从多目录组织到交叉编译。对于绝大多数 C/C++ 项目来说,CMake + Ninja 已经是一套非常成熟的方案了。 但假设你的项目是这样的: 3000 个源文件,跨越 C++、Java、Python、Go、ProtoBuf 五种语言 50 人的团队,...
1、make 不够快吗? 用了几年 make 后,你有没有发现一个现象: make -j8 你开了 8 个并行线程,CPU 跑满了,但 make 还是要在启动时「卡」几秒钟才真正开始编译。 这几秒钟里,make 在干什么? 它在构建依赖图——从 Makefile 里解析谁依赖谁、谁先编译谁后编译。Makefile 是文本格式,make 每次...
1、你会遇到这个需求 某天,你可能会遇到这样的场景: 要在树莓派(ARM 架构)上跑一个程序,但树莓派性能太弱,直接在上面编译慢得令人发指 你是做嵌入式的,目标板是 ARM 芯片,根本没操作系统,更不可能在上面装编译器 你想给 Android 或 iOS 设备编一个 native 库 这时候你就需要交叉编译(cross compi...
1、项目长大了怎么办? 前面的文章里,我们写的都是单文件或单目录项目——所有代码放在一起,一个 CMakeLists.txt 搞定。 但真实的 C/C++ 项目可不是这样的。一个典型的项目结构长这样: myapp/ ├── CMakeLists.txt # 顶层 ├── src/ │ ├── CMakeLists.txt ...
1、一则警告 如果你用搜索引擎查 CMake 用法,大概率会搜到这样的代码: include_directories(${PROJECT_SOURCE_DIR}/include) link_libraries(curl ssl crypto) add_executable(myapp main.c) 这能跑。但如果你这样写—— 说明你看的是旧...