# The Island - 荒岛生存模拟游戏 一个实时多人互动的荒岛生存模拟游戏,玩家可以通过命令与 AI 角色互动,帮助他们在荒岛上生存。 ## 项目架构 ``` the-island/ ├── backend/ # Python FastAPI 后端服务 │ └── app/ │ ├── main.py # 应用入口 │ ├── server.py # WebSocket 服务器 │ ├── engine.py # 游戏引擎核心逻辑 │ ├── models.py # SQLAlchemy 数据模型 │ ├── schemas.py # Pydantic 消息模式 │ ├── llm.py # LLM 集成 (对话生成) │ ├── twitch_service.py # Twitch 聊天机器人 │ └── database.py # 数据库配置 ├── frontend/ # Web 调试客户端 │ ├── app.js # JavaScript 客户端 │ └── debug_client.html # 调试页面 ├── unity-client/ # Unity 6 游戏客户端 │ └── Assets/ │ ├── Scripts/ # C# 游戏脚本 │ ├── Fonts/ # 字体资源 (含中文支持) │ └── Editor/ # 编辑器工具 └── island.db # SQLite 数据库 ``` ## 功能特性 ### 游戏系统 - **生存机制**: 角色有 HP、能量、心情三大属性 - **昼夜循环**: 黎明 → 白天 → 黄昏 → 夜晚 - **天气系统**: 晴天、多云、雨天、暴风雨、炎热、雾天 - **社交系统**: 角色间自主社交互动 - **休闲模式**: 自动复活、降低难度 ### 玩家命令 | 命令 | 格式 | 金币消耗 | 效果 | |------|------|----------|------| | feed | `feed <角色名>` | 10g | +20 能量, +5 HP | | heal | `heal <角色名>` | 15g | +30 HP | | talk | `talk <角色名> [话题]` | 0g | 与角色对话 | | encourage | `encourage <角色名>` | 5g | +15 心情 | | revive | `revive <角色名>` | 10g | 复活死亡角色 | | check | `check` | 0g | 查看所有状态 | | reset | `reset` | 0g | 重置游戏 | ### AI 角色 - **Jack** (勇敢) - 蓝色 - **Luna** (狡猾) - 粉色 - **Bob** (诚实) - 绿色 每个角色有独特性格,会根据性格做出不同反应和社交行为。 ## 技术栈 ### 后端 - **Python 3.11+** - **FastAPI** - 异步 Web 框架 - **WebSocket** - 实时双向通信 - **SQLAlchemy** - ORM 数据持久化 - **SQLite** - 轻量级数据库 - **LiteLLM** - 多 LLM 提供商支持 - **TwitchIO** - Twitch 聊天集成 ### Unity 客户端 - **Unity 6 LTS** (6000.3.2f1) - **TextMeshPro** - 高质量文本渲染 - **NativeWebSocket** - WebSocket 通信 - **2.5D 风格** - 精灵 + Billboard UI ## 快速开始 ### 1. 启动后端服务 ```bash cd backend pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### 2. 启动 Unity 客户端 1. 使用 Unity 6 打开 `unity-client` 文件夹 2. 打开 `Assets/Scenes/main.unity` 3. 点击 Play 运行游戏 ### 3. Web 调试客户端 (可选) 在浏览器打开 `frontend/debug_client.html` ## Unity 客户端结构 ### 核心脚本 | 脚本 | 功能 | |------|------| | `NetworkManager.cs` | WebSocket 连接管理、消息收发 | | `GameManager.cs` | 游戏状态管理、角色生成 | | `UIManager.cs` | 主 UI 界面 (顶部状态栏、底部命令输入) | | `EventLog.cs` | 事件日志面板 (显示游戏事件) | | `AgentVisual.cs` | 角色视觉组件 (精灵、血条、对话框) | | `EnvironmentManager.cs` | 环境场景 (沙滩、海洋、天空) | | `WeatherEffects.cs` | 天气粒子效果 (雨、雾、热浪) | ### 视觉特性 - 程序化生成的 2.5D 角色精灵 - Billboard UI (始终面向摄像机) - 动态天气粒子系统 - 渐变天空盒 (随时间变化) - 海浪动画效果 ## 中文字体支持 项目使用 **思源黑体 (Source Han Sans SC)** 支持中文显示。 ### 手动配置步骤 1. 选择 `Assets/Fonts/SourceHanSansSC-Regular.otf` 2. 右键 → Create → TextMeshPro → Font Asset → SDF 3. 打开 Edit → Project Settings → TextMesh Pro 4. 在 Fallback Font Assets 中添加生成的字体资产 ## 通信协议 ### WebSocket 端点 ``` ws://localhost:8000/ws/{username} ``` ### 事件类型 ```python # 核心事件 TICK # 游戏心跳 AGENTS_UPDATE # 角色状态更新 AGENT_SPEAK # 角色发言 AGENT_DIED # 角色死亡 # 时间系统 PHASE_CHANGE # 时段变化 (黎明/白天/黄昏/夜晚) DAY_CHANGE # 新的一天 WEATHER_CHANGE # 天气变化 # 玩家互动 FEED # 喂食反馈 HEAL # 治疗反馈 TALK # 对话反馈 ENCOURAGE # 鼓励反馈 REVIVE # 复活反馈 # 社交系统 SOCIAL_INTERACTION # 角色间社交 AUTO_REVIVE # 自动复活 (休闲模式) ``` ## Twitch 直播集成 游戏支持连接到 Twitch 直播聊天室,观众可以通过发送弹幕来控制游戏。 ### 获取 Twitch Token **方法一:Twitch Token Generator (推荐用于测试)** 1. 访问 https://twitchtokengenerator.com/ 2. 选择 "Bot Chat Token" 3. 使用你的 Twitch 账号授权 4. 复制 "Access Token" (以 `oauth:` 开头) **方法二:Twitch Developer Console (生产环境)** 1. 访问 https://dev.twitch.tv/console/apps 2. 创建新应用,类型选择 "Chat Bot" 3. 设置 OAuth 重定向 URL: `http://localhost:3000` 4. 使用 OAuth 授权码流程获取 Token 5. 需要的权限范围: `chat:read`, `chat:edit`, `bits:read` ### Bits 打赏转换 观众在直播间使用 Bits 打赏时,系统会自动将 Bits 转换为游戏内金币: - **转换比率**: 1 Bit = 1 Gold - Unity 客户端会收到 `gift_effect` 事件用于显示特效 ## 环境变量 在 `backend/.env` 文件中配置: ```env # LLM 配置 (选择一种) ANTHROPIC_API_KEY=your_api_key_here # 或 OPENAI_API_KEY=your_api_key_here LLM_MODEL=gpt-3.5-turbo # Twitch 配置 (可选) TWITCH_TOKEN=oauth:your_access_token_here TWITCH_CHANNEL_NAME=your_channel_name TWITCH_COMMAND_PREFIX=! ``` ### 必需变量 | 变量 | 说明 | |------|------| | `LLM_MODEL` | LLM 模型名称 | | `ANTHROPIC_API_KEY` 或 `OPENAI_API_KEY` | LLM API 密钥 | ### Twitch 变量 (可选) | 变量 | 说明 | |------|------| | `TWITCH_TOKEN` | OAuth Token (必须以 `oauth:` 开头) | | `TWITCH_CHANNEL_NAME` | 要加入的频道名称 | | `TWITCH_COMMAND_PREFIX` | 命令前缀 (默认 `!`) | ## 开发说明 ### 添加新命令 1. 在 `backend/app/schemas.py` 添加事件类型 2. 在 `backend/app/engine.py` 添加命令处理逻辑 3. 在 `unity-client/Assets/Scripts/Models.cs` 添加数据模型 4. 在 `unity-client/Assets/Scripts/NetworkManager.cs` 添加事件处理 ### 调试 - Unity 控制台查看日志 - Web 调试客户端查看原始消息 - 后端日志查看服务器状态 ## 许可证 MIT License