Add complete AI Director system that transforms the survival simulation into a user-driven interactive story with audience voting. Backend: - Add DirectorService for LLM-powered plot generation with fallback templates - Add VoteManager for dual-channel voting (Twitch + Unity) - Integrate 4-phase game loop: Simulation → Narrative → Voting → Resolution - Add vote command parsing (!1, !2, !A, !B) in Twitch service - Add type-safe LLM output handling with _coerce_int() helper - Normalize voter IDs for case-insensitive duplicate prevention Unity Client: - Add NarrativeUI for cinematic event cards and voting progress bars - Add 7 new event types and data models for director/voting events - Add delayed subscription coroutine for NetworkManager timing - Sync client timer with server's remaining_seconds to prevent drift Documentation: - Update README.md with AI Director features, voting commands, and event types 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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 集成 (对话生成)
│ ├── memory_service.py # Agent 记忆管理服务
│ ├── twitch_service.py # Twitch 聊天机器人
│ ├── director_service.py # AI 导演服务 (叙事生成)
│ ├── vote_manager.py # 投票管理器
│ └── database.py # 数据库配置
├── frontend/ # Web 调试客户端
│ ├── app.js # JavaScript 客户端
│ └── debug_client.html # 调试页面
├── unity-client/ # Unity 6 游戏客户端
│ └── Assets/
│ ├── Scripts/ # C# 游戏脚本
│ ├── Fonts/ # 字体资源 (含中文支持)
│ └── Editor/ # 编辑器工具
└── island.db # SQLite 数据库
功能特性
游戏系统
- 生存机制: 角色有 HP、能量、心情三大属性
- 昼夜循环: 黎明 → 白天 → 黄昏 → 夜晚
- 天气系统: 晴天、多云、雨天、暴风雨、炎热、雾天
- 社交系统: 角色间自主社交互动
- 休闲模式: 自动复活、降低难度
- 自主行动: 角色会自动进行采集、休息、社交等行为
- 疾病机制: 恶劣天气和低免疫力可能导致生病
- 制作系统: 使用草药制作药品治愈疾病
- 资源稀缺: 树木果实有限,每日再生
- 社交角色: 领导者、追随者、独行者动态关系
- 记忆系统: Agent 会记住重要的互动和事件
- 随机事件: 风暴破坏、发现宝藏、野兽袭击等
- AI 导演系统: 自动生成剧情事件,观众投票决定剧情走向
- 叙事投票: Twitch 观众通过
!1!2命令参与剧情决策
玩家命令
| 命令 | 格式 | 金币消耗 | 效果 |
|---|---|---|---|
| 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 | 重置游戏 |
| !1 / !A | !1 或 !A |
0g | 投票选择第一选项 |
| !2 / !B | !2 或 !B |
0g | 投票选择第二选项 |
AI 角色
- Jack (勇敢) - 蓝色
- Luna (狡猾) - 粉色
- Bob (诚实) - 绿色
每个角色有独特性格,会根据性格做出不同反应和社交行为。
角色属性
| 属性 | 说明 |
|---|---|
| HP | 生命值,归零则死亡 |
| 能量 | 行动力,过低会影响行动 |
| 心情 | 情绪状态,影响社交和决策 |
| 免疫力 | 抵抗疾病的能力 (0-100) |
| 社交角色 | leader/follower/loner/neutral |
| 当前行动 | Idle/Gather/Sleep/Socialize 等 |
| 位置 | tree_left/tree_right/campfire/herb_patch 等 |
技术栈
后端
- 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. 启动后端服务
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
2. 启动 Unity 客户端
- 使用 Unity 6 打开
unity-client文件夹 - 打开
Assets/Scenes/main.unity - 点击 Play 运行游戏
3. Web 调试客户端 (可选)
在浏览器打开 frontend/debug_client.html
Unity 客户端结构
核心脚本
| 脚本 | 功能 |
|---|---|
NetworkManager.cs |
WebSocket 连接管理、消息收发 |
GameManager.cs |
游戏状态管理、角色生成、行动系统 |
UIManager.cs |
主 UI 界面 (顶部状态栏、底部命令输入) |
EventLog.cs |
事件日志面板 (显示游戏事件) |
AgentVisual.cs |
角色视觉组件 (精灵、血条、对话框、状态图标) |
EnvironmentManager.cs |
环境场景 (沙滩、海洋、天空) |
WeatherEffects.cs |
天气粒子效果 (雨、雾、热浪) |
Models.cs |
数据模型 (Agent、WorldState、事件数据) |
NarrativeUI.cs |
AI 导演叙事界面 (剧情卡片、投票进度条、倒计时) |
视觉特性
- 程序化生成的 2.5D 角色精灵
- Billboard UI (始终面向摄像机)
- 动态天气粒子系统
- 渐变天空盒 (随时间变化)
- 海浪动画效果
中文字体支持
项目使用 思源黑体 (Source Han Sans SC) 支持中文显示。
手动配置步骤
- 选择
Assets/Fonts/SourceHanSansSC-Regular.otf - 右键 → Create → TextMeshPro → Font Asset → SDF
- 打开 Edit → Project Settings → TextMesh Pro
- 在 Fallback Font Assets 中添加生成的字体资产
通信协议
WebSocket 端点
ws://localhost:8000/ws/{username}
事件类型
# 核心事件
TICK # 游戏心跳
AGENTS_UPDATE # 角色状态更新
AGENT_SPEAK # 角色发言
AGENT_DIED # 角色死亡
# 时间系统
PHASE_CHANGE # 时段变化 (黎明/白天/黄昏/夜晚)
DAY_CHANGE # 新的一天
WEATHER_CHANGE # 天气变化
# 玩家互动
FEED # 喂食反馈
HEAL # 治疗反馈
TALK # 对话反馈
ENCOURAGE # 鼓励反馈
REVIVE # 复活反馈
GIFT_EFFECT # Bits 打赏特效
# 社交系统
SOCIAL_INTERACTION # 角色间社交
AUTO_REVIVE # 自动复活 (休闲模式)
# 自主行动系统 (Phase 13+)
AGENT_ACTION # 角色执行行动 (采集/休息/社交等)
CRAFT # 制作物品 (药品等)
USE_ITEM # 使用物品
RANDOM_EVENT # 随机事件 (风暴/宝藏/野兽等)
# AI 导演与叙事投票 (Phase 9)
MODE_CHANGE # 游戏模式切换 (simulation/narrative/voting/resolution)
NARRATIVE_PLOT # 导演生成的剧情事件
VOTE_STARTED # 投票开始
VOTE_UPDATE # 实时投票进度更新
VOTE_ENDED # 投票结束
VOTE_RESULT # 投票结果
RESOLUTION_APPLIED # 剧情决议执行
Twitch 直播集成
游戏支持连接到 Twitch 直播聊天室,观众可以通过发送弹幕来控制游戏。
获取 Twitch Token
方法一:Twitch Token Generator (推荐用于测试)
- 访问 https://twitchtokengenerator.com/
- 选择 "Bot Chat Token"
- 使用你的 Twitch 账号授权
- 复制 "Access Token" (以
oauth:开头)
方法二:Twitch Developer Console (生产环境)
- 访问 https://dev.twitch.tv/console/apps
- 创建新应用,类型选择 "Chat Bot"
- 设置 OAuth 重定向 URL:
http://localhost:3000 - 使用 OAuth 授权码流程获取 Token
- 需要的权限范围:
chat:read,chat:edit,bits:read
Bits 打赏转换
观众在直播间使用 Bits 打赏时,系统会自动将 Bits 转换为游戏内金币:
- 转换比率: 1 Bit = 1 Gold
- Unity 客户端会收到
gift_effect事件用于显示特效
环境变量
在 backend/.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 |
命令前缀 (默认 !) |
开发说明
添加新命令
- 在
backend/app/schemas.py添加事件类型 - 在
backend/app/engine.py添加命令处理逻辑 - 在
unity-client/Assets/Scripts/Models.cs添加数据模型 - 在
unity-client/Assets/Scripts/NetworkManager.cs添加事件处理
调试
- Unity 控制台查看日志
- Web 调试客户端查看原始消息
- 后端日志查看服务器状态
许可证
MIT License
Description
项目名: 《荒岛:人性的试炼》 (Project: The Island)
设定: 10 个性格迥异的 AI 被投放到荒岛。有老实人、心机女、暴躁哥等。目标是活到最后。
互动循环:
白天(探索与社交): AI 搜集资源,彼此聊天。
观众互动: 免费发弹幕可以作为“风声”干扰 AI。
付费点: 大哥刷礼物空投物资包。AI 会为了争夺物资包大打出手,或者某人独占后分给其他人(建立社交地位)。
黄昏(投票与审判): 每天结束时,AI 们围坐在火堆旁,讨论今天谁贡献最少,投票流放一人。
核心付费点(赎罪券): 如果某个 AI 即将被流放,它会哭诉求饶。此时,如果有人为它刷特定礼物,它会获得“免死金牌”。该 AI 会极其感激这位救命恩人,并在后续游戏中成为恩人的死忠粉。
夜晚(梦境与密谋): AI 睡觉。
高级玩法: 大哥进入 AI 梦境(私聊),告诉它明天陷害谁。
Languages
C#
63.2%
Python
20.2%
ShaderLab
8.5%
GLSL
2.4%
HLSL
2.2%
Other
3.5%