Skip to content

FishCat233/FishONU

Repository files navigation

FishONU

GitHub Release GitHub Downloads (all assets, all releases) wakatime

一个基于 Unity 的多人在线 UNO 卡牌游戏

项目简介

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

安装与运行

  1. 克隆项目到本地
  2. 使用 Unity Hub 打开项目
  3. 等待 Unity 完成包的导入和编译
  4. 在 Unity 编辑器中打开主场景
  5. 点击运行按钮启动游戏

网络联机

游戏使用 Mirror 框架实现网络联机功能:

  1. 创建主机 - 在主菜单选择"创建房间"
  2. 加入游戏 - 输入主机 IP 地址或选择局域网内的房间
  3. 开始游戏 - 所有玩家准备后,房主可以开始游戏

开发历程

项目采用马拉松式开发模式,从 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!

许可证

本项目仅供学习和交流使用。

联系方式

如有问题或建议,欢迎联系。

About

一个基于 Unity 的多人在线 UNO 卡牌游戏

Resources

Stars

Watchers

Forks

Packages

 
 
 

Languages