FishONU 是一个使用 Unity 引擎开发的多人在线卡牌游戏,基于经典的 UNO 游戏规则。游戏支持多人实时联机对战,拥有完整的卡牌系统、游戏状态管理和流畅的动画效果。
当前版本:v0.0.1
项目于 2026 年 2 月 6 日启动,经过 7 天的马拉松式开发,累计开发时间约 69 小时,提交超过 100 次,代码量约 2700 行 C# 代码。目前已实现核心游戏功能,可以进行完整的多人对战。
- Unity 游戏引擎 - 2022.3 或更高版本
- Mirror - 网络同步框架,实现多人联机功能
- DOTween - 动画补间库,提供流畅的卡牌动画效果
- R3 - 响应式编程库,处理游戏事件和状态变化(用于 UI 交互和状态同步)
- URP (Universal Render Pipeline) - 通用渲染管线
- Input System - Unity 新输入系统
- TextMeshPro - 高级文本渲染
- ParrelSync - Unity 多项目克隆工具,便于网络联机测试
项目采用模块化设计,基于状态机模式和响应式编程思想,主要包含以下核心模块:
卡牌系统 (CardSystem)
CardData- 卡牌数据结构,支持网络序列化CardObj- 卡牌游戏对象,负责视觉表现BaseInventory- 基础卡牌容器抽象类OwnerInventory- 玩家手牌容器,支持卡牌高亮和交互SecretInventory- 隐藏卡牌容器,实现数据遮掩机制DiscardInventory- 弃牌堆容器CardArrangeStrategy- 卡牌排列策略接口及多种实现(线性、圆弧、波浪等)
游戏状态管理 (GameState)
GameStateManager- 状态管理器,使用 SyncVar 同步状态GameState- 状态基类PrepareState- 准备状态(洗牌、发牌)PlayerTurnState- 玩家回合状态AffectedTurn- 受影响回合状态(跳过、+2、+4 等)WaitingForColor- 等待选择颜色状态GameOverState- 游戏结束状态
网络系统 (Network)
BaseNetworkManager- 基于 Mirror 的网络管理器- 使用 SyncVar 和 SyncList 实现数据同步
- 使用 RPC 实现远程方法调用
- 支持主机/客户端模式
玩家系统 (Player)
PlayerController- 玩家控制器,管理玩家状态和操作TableManager- 桌面管理器,处理桌面卡牌交互SeatHelper- 座位辅助工具,管理玩家座位和视角
用户界面 (UI)
MainMenuUI- 主菜单界面(创建房间、加入游戏)GameUI- 游戏界面,使用 R3 响应式编程AnchorProvider- UI 锚点提供者,适配不同屏幕尺寸
工具类 (Utils)
Algorithm- 算法工具集合IdentifierHelper- 标识符辅助工具SeatHelper- 座位计算工具
- 状态模式 - 游戏状态管理,不同状态有独立的行为
- 策略模式 - 卡牌排列策略,支持多种排列方式
- 观察者模式 - 使用 R3 的 Observable/Subject 实现事件驱动
- 单例模式 - 部分管理器使用单例模式
- 网络层 - Mirror 框架,基于 TCP/UDP 传输
- 表现层 - UGUI + DOTween 动画
- 逻辑层 - 状态机 + 响应式编程
- 数据层 - ScriptableObject + 网络同步数据结构
- 多人联机 - 支持多名玩家实时对战
- 完整卡牌系统 - 包含数字牌、功能牌和万能牌
- 游戏状态管理 - 使用状态机管理游戏流程
- 流畅动画 - 卡牌移动、发牌等动画效果
- 座位系统 - 玩家座位管理和视角切换
- 响应式编程 - 使用 R3 处理游戏事件和 UI 交互
- 数据遮掩 - 客户端无法看到其他玩家的手牌实际数据,只能看到卡牌数量
- 卡牌排列策略 - 支持多种卡牌排列方式(线性、圆弧、波浪等)
- 游戏结算 - 完整的游戏结束和排名系统
- 数字牌 (0-9) - 红色、蓝色、绿色、黄色
- 功能牌 - Skip(跳过)、Reverse(反转)、Draw Two(+2)
- 万能牌 - Wild(变色)、Wild Draw Four(变色+4)
- Unity 2022.3 或更高版本
- Windows 10/11
- 克隆项目到本地
- 使用 Unity Hub 打开项目
- 等待 Unity 完成包的导入和编译
- 在 Unity 编辑器中打开主场景
- 点击运行按钮启动游戏
游戏使用 Mirror 框架实现网络联机功能:
- 创建主机 - 在主菜单选择"创建房间"
- 加入游戏 - 输入主机 IP 地址或选择局域网内的房间
- 开始游戏 - 所有玩家准备后,房主可以开始游戏
项目采用马拉松式开发模式,从 2026 年 2 月 6 日开始,历时 7 天完成核心功能开发:
- 2月6日 - 项目启动,创建项目结构,添加依赖,开始编写 CardData
- 2月7日 - 实现卡牌系统核心类(OwnerInventory、SecretInventory、BaseInventory、IArrangeStrategy)、DebugUI 和状态机框架
- 2月8日 - 实现弃牌堆 Prefab,完善 DebugUI,实现数据遮掩机制和手牌排列策略
- 2月9日 - 重构代码,修复野蛮生长导致的问题,编写辅助类
- 2月10日 - 修复 ArrangeStrategy bug,实现游戏准备阶段(洗牌发牌)
- 2月11日 - 实现选卡打出功能,卡牌高光,重构类间接口,显示当前轮次
- 2月12日 - 实现功能牌架构,编写反转牌和跳过牌,大量 bug 修复和重构
- 2月13日 - 实现万能牌(Wild 和 Wild Draw Four),整理代码,增加游戏结算机制
- 2月14日 - 使用 R3 重写 UI,实现主界面、主机/加入游戏、玩家名称显示,完成 v0.0.1 版本
累计开发时间约 69 小时,提交超过 100 次,代码量约 2700 行 C# 代码。
详细开发日志请参考 HISTORY_LINE.md
欢迎提交 Issue 和 Pull Request!
本项目仅供学习和交流使用。
如有问题或建议,欢迎联系。