今天在 GitHub Trending 上看到一个有意思的项目:Unciv,这是一款用 LibGDX 开发的开源文明V重制版,能在 Android 和桌面端流畅运行,特别适合怀旧玩家和模改爱好者。
一、项目概述
Unciv 是一个开源的、专注于模改(moddability)的 Android 和桌面端文明V重制版,使用 LibGDX 游戏开发框架构建。项目的核心理念是打造一个轻量、快速、可模改、开源且深度的 4X 策略游戏,即使是在低配置设备上也能流畅运行。
核心特性:
- 跨平台支持:Android、Linux、Windows、macOS、Raspberry Pi 全覆盖
- 开源免费:完全开源,无广告,无内购
- 模改友好:强大的模改系统,玩家可以自定义文明、单位、建筑等
- 轻量高效:相比原版 Civ V,资源占用极低,启动速度快
- 多语言支持:通过社区翻译,支持多种语言
项目在 GitHub 上获得了广泛的关注,支持通过 Google Play、F-Droid、itch.io、Flathub、AUR、Homebrew、Chocolatey 等多种方式安装。
二、技术原理
架构设计
Unciv 基于 LibGDX 框架开发,这是一个成熟的跨平台 Java 游戏开发框架,支持 Windows、Linux、macOS、Android、iOS 和 Web 平台。项目采用典型的 LibGDX 多层架构:
├── core/ # 核心游戏逻辑(平台无关)
├── desktop/ # 桌面端启动器和打包配置
├── android/ # Android 平台特定代码
├── ios/ # iOS 平台特定代码(未活跃维护)
└── assets/ # 游戏资源(JSON 配置、图像、音频)
核心技术栈与选型理由
LibGDX 是项目的技术基石,选型理由包括:
- 跨平台能力:一套代码编译到多个平台,降低维护成本
- 成熟稳定:拥有丰富的生态系统和社区支持
- 性能优秀:基于 OpenGL ES,渲染性能出色
- Java 生态:便于利用现有的 Java 库和工具链
JSON 驱动的配置系统是 Unciv 模改系统的核心。游戏的所有规则、文明、单位、建筑、科技树等都以 JSON 文件定义,存放在 android/assets/jsons/ 目录下。这种设计使得玩家无需编写代码即可创建复杂的模改。
关键算法与设计模式
状态模式(State Pattern):游戏中的单位和城市都有复杂的状态管理,使用状态模式清晰地处理不同状态下的行为。
观察者模式(Observer Pattern):用于实现事件系统和 UI 更新机制,当游戏状态变化时自动通知相关组件。
策略模式(Strategy Pattern):AI 决策系统使用策略模式,不同的 AI 难度和风格采用不同的决策策略。
数据流分析
游戏的数据流主要围绕 GameInfo 对象展开,这是整个游戏状态的核心数据结构:
// 核心游戏状态结构
class GameInfo {
val civilizations: MutableList<Civilization> = mutableListOf()
val cities: MutableList<City> = mutableListOf()
val tiles: MutableList<Tile> = mutableListOf()
val units: MutableList<MapUnit> = mutableListOf()
val difficulty: Difficulty = Difficulty.None
val gameParameters: GameParameters = GameParameters()
// ...
}
所有游戏操作都会修改 GameInfo 或其子对象,然后通过序列化保存到本地或用于多人游戏同步。
三、安装与快速开始
环境要求
- Android 5.0+
- 桌面端:Java 11+(推荐 OpenJDK 11 或 17)
- 磁盘空间:至少 100MB 可用空间
安装步骤
Android 设备:
# 通过 Google Play 安装
# 或下载 F-Droid 版本
# 或从 GitHub Releases 下载 APK
Linux 桌面:
# Flatpak 安装(推荐)
flatpak install flathub io.github.yairm210.unciv
# 或从 AUR 安装(Arch Linux)
yay -S unciv-bin
# 或下载 Jar 文件运行
java -jar Unciv.jar
Windows:
# 下载安装 MSI
# 或从 Chocolatey 安装
choco install unciv
# 或下载 Jar 文件运行
java -jar Unciv.jar
macOS:
# 使用 Homebrew 安装
brew update && brew install unciv
# 或下载 Jar 文件运行
java -jar Unciv.jar
最简运行示例
桌面端运行 Jar(所有平台通用):
# 下载最新 Release 的 Jar 文件
wget https://github.com/yairm210/Unciv/releases/latest/download/Unciv.jar
# 运行游戏
java -jar Unciv.jar
Docker 运行(实验性):
# 拉取并运行 Docker 镜像
docker run -d -p 6901:6901 -p 5901:5901 ghcr.io/yairm210/unciv
# 在浏览器中访问
# http://localhost:6901/vnc.html?password=headless
四、使用方法与实战
基础用法
开始新游戏:启动游戏 → 选择"快速游戏"或"新游戏" → 选择文明 → 配置游戏参数 → 开始
游戏界面:
- 底部:选中单位的动作栏
- 右侧:城市和生产信息
- 顶部:资源栏(金币、科研、文化等)
- 左侧:游戏速度和菜单
基本操作:
- 点击单位进行选择
- 点击目的地移动单位
- 点击城市查看详情
- 双指缩放地图
进阶用法
模改安装:
- 从社区或 Steam 创意工坊下载模改(JSON 文件或文件夹)
- 将模改放入以下目录:
- Android:
/sdcard/Android/data/com.unciv.app/files/mods/ - 桌面:
~/.local/share/unciv/mods/(Linux)或%APPDATA%\unciv\mods\(Windows)
- Android:
- 在游戏中启用模改:设置 → 模改 → 启用所需模改
自定义文明:
创建 MyCiv.json 文件,定义新文明:
{
"name": "我的文明",
"leaderName": "领导者",
"flags": ["IsCityState", "IsMajorCiv"],
"uniqueUnits": ["MY_UNIQUE_UNIT"],
"uniqueBuildings": ["MY_UNIQUE_BUILDING"],
"startBias": ["Coast", "Luxury"],
"cityNames": ["首都", "第二城", "第三城"]
}
实际项目示例
场景:创建自定义单位
{
"name": "激光步兵",
"unitType": "LandUnit",
"cost": 150,
"strength": 40,
"rangedStrength": 25,
"range": 2,
"movement": 2,
"requiredTech": "LaserTechnology",
"upgradesTo": "None",
"uniqueTo": "未来文明",
"uniques": [
"3倍伤害对抗机械化单位",
"+10% 防御在丘陵地形"
]
}
五、常见问题与解决方案
安装失败
问题:Android 安装 APK 时提示"解析包错误" 解决方案:
- 检查 Android 版本是否 ≥ 5.0
- 确保下载的 APK 文件完整(重新下载)
- 在设置中允许"安装未知来源应用"
问题:桌面端运行 Jar 提示"找不到 Java" 解决方案:
# 检查 Java 版本
java -version
# 如果未安装,安装 OpenJDK 11
# Ubuntu/Debian
sudo apt install openjdk-11-jdk
# macOS
brew install openjdk@11
# Windows:从 Adoptium 下载安装
运行时错误
问题:游戏启动后黑屏或崩溃 解决方案:
- 更新显卡驱动
- 如果是集成显卡,尝试禁用 GPU 加速:在启动参数中添加
--disable-gpu - 检查日志文件:
~/.local/share/unciv/logs/或 Android 的 logcat
问题:游戏卡顿、帧率低下 解决方案:
- 在设置中降低图形质量
- 关闭动画效果
- 如果是大地图(巨图),考虑减小地图尺寸
- 升级设备硬件(推荐 4GB+ RAM)
模改问题
问题:启用的模改没有效果 解决方案:
- 确认模改文件放置在正确目录
- 检查模改是否兼容当前游戏版本
- 查看游戏日志中的模改加载错误
- 尝试禁用其他模改(模改冲突)
问题:自定义文明/单位不显示 解决方案:
- 检查 JSON 语法是否正确(使用 JSON 校验器)
- 确认所有引用的科技、建筑等存在
- 查看游戏内的"模改验证"工具的输出
兼容性问题
问题:保存的游戏在新版本中无法加载 解决方案:
- Unciv 通常保持向后兼容,但重大更新可能破坏兼容性
- 尝试用旧版本加载存档,然后导出游戏状态
- 关注 GitHub Releases 的更新日志,了解破坏性变更
六、总结
Unciv 是一个令人敬佩的开源项目,它证明了开源社区能够创造出高质量、跨平台的游戏重制版。通过使用 LibGDX 框架和 JSON 驱动的配置系统,项目实现了极高的可移植性和可模改性。
项目亮点:
- ✅ 完全开源,代码质量高,适合学习 LibGDX 游戏开发
- ✅ 真正的跨平台,覆盖移动端和桌面端
- ✅ 强大的模改系统,社区创作活跃
- ✅ 轻量高效,低配设备也能流畅运行
- ✅ 持续维护,开发者活跃
适合人群:
- 文明系列老玩家,想要在移动设备上体验文明V
- 开源爱好者,想要贡献代码或模改
- 游戏开发学习者,想要研究 LibGDX 实际项目
- 4X 策略游戏爱好者,寻找轻量级替代品
如果你怀念文明V的经典玩法,又想要在手机或低配电脑上玩,Unciv 绝对值得一试。而且,作为开源项目,你不仅可以免费游玩,还可以参与到项目的开发和改进中。
相关资源:
- GitHub 仓库:https://github.com/yairm210/Unciv
- 在线文档:https://yairm210.github.io/Unciv/
- Discord 社区:https://discord.gg/bjrB4Xw
- F-Droid 下载:https://f-droid.org/en/packages/com.unciv.app/