andyhuo520/tang-changan

GitHub: andyhuo520/tang-changan

基于 Three.js 的纯前端 3D 交互项目,以唐代长安城为背景复刻了一座可漫游、可对话、可游戏的互动微缩沙盘。

Stars: 102 | Forks: 23

# 大唐长安 · Tang Chang'an Diorama (V11) 复刻 Expeditione™ 风格的互动微缩沙盘,主题 **大唐百年史**。120×160 单位级地图、**三大殿纵轴**(含元 → 宣政 → 紫宸)、跨河桥梁、七层大雁塔、曲江画舫、朱雀城门、东西二市、稻麦水利、胡旋舞乐——配以 **昼夜流转 · 四季流转 · 宵禁夜禁 · 唐诗节点 · 寺钟鸡鸣 · 天气切换(雨/沙/雾 + 闪电雷声 + 风向斜飘)· NPC 市井段子 · 历史事件轴 · 4 款 mini-game · 移动端适配 · 🎮 RPG 模式 · 👀 第一人称 FPS 模式 · 🖼 5 座 360° 殿宇展厅**,一幅可漫游、可对话、可吟诗、可游戏、可扮演、可入殿看展、可穿越百年的盛唐画卷。 image image ## 开发教程与 Agora Skills 安装 - 科普教程 Markdown:[`docs/05_从设计到完成_开发过程科普教程.md`](docs/05_从设计到完成_开发过程科普教程.md) - 精排 HTML 版:[`docs/05_从设计到完成_开发过程科普教程.html`](docs/05_从设计到完成_开发过程科普教程.html) 教程中的「7.0 开发前置:安装 Agora Skills / Agora CLI」包含: - 安装 `agora` CLI; - `agora login` 登录; - `agora project doctor --feature convoai` 检查 ConvoAI; - `agora project env write .env.local --overwrite` 写入语音后端环境变量; - 常见 `CAN_NOT_GET_GATEWAY_SERVER` / `401 Invalid token` 排查。 ## V11 · 经济基建 · 4 币种 · 5 类物品 · 5 处店铺 游戏 (Mode 2) 与展示 (Mode 1) 至此**真正分家** —— Mode 2 多出一套有源有汇的经济: ### 4 种货币(同步显示在屏右上"钱包"胸牌) | 币种 | 图标 | 主用途 | |------|------|--------| | **铜钱** copper | 🪙 | 食货 / 小件文房 / 小礼物 | | **绢帛** silk | 🧵 | 衣冠 / 中价文房 / 雅物 | | **金锭** gold | 🏵 | 真迹 / 凭证 / 城门通牒 | | **风雅** fame | ✦ | 累计(雅物 / 诗仙赞 → 解锁高阶 NPC) | ### 4 职业 · 不同开局资源 | 职业 | 开局钱包 | 开局物品 | |------|---------|---------| | 文士 scholar | 30 文 + 2 绢 + ✦5 | 湖州狼毫 + 一刀宣纸 | | 商贾 merchant | 80 文 + 4 绢 + ✦1 | — | | 仕女 lady | 50 文 + 3 绢 + 1 金 + ✦3 | 一枚玉佩 | | 武人 soldier | 40 文 + ✦2 | 胡饼 ×2 | ### 5 类物品(共 27 件,分类聚合显示) | 类 | 例 | 效果 | |----|----|------| | 🥯 **食货** food | 胡饼 / 葡萄酒 / 酥山 / 剑南春 | **吃** → 回体力 + 临时风度 charm | | 🖌 **文房** literati | 狼毫 / 松烟墨 / 宣纸 / 端砚 / 唐诗集 / 全唐诗 | 累加 **poetryBonus**,达 15 解锁"灵思一次" | | 👘 **衣冠** attire | 青衫 / 乌纱帽 / 玉佩 / 织锦帕 / 香囊 | **着** → 装备槽(头/身/饰)+ 常驻 charm | | 🪞 **雅物** collectible | 西凉铜镜 / 东海明珠 / 吴道子真迹 / 蜀锦 / 滕王阁序拓本 | 入袋即 ✦风雅 累计 | | 🪪 **凭证** pass | 诗仙赞腰牌 / 通关文牒 / 进士印 | 解锁区域 / 高阶 NPC | ### 5 处店铺(实地店招 · 走近 `F` 开店) | 店 | 位置 | 主售 | |----|------|------| | 🏮 **朱雀酒肆** | (-5, -1) | 食货 7 件(胡饼/葡萄酒/酥山/剑南春…) | | 🏮 **东市米粮铺** | (5, 16) | 食货 4 件(粳米/胡饼/栗子/清茗) | | 🏮 **东市文房斋** | (-5, 17) | 文房 7 件(笔墨纸砚 + 唐诗集 + 全唐诗) | | 🏮 **东市绫罗肆** | (0, 19) | 衣冠 6 件(青衫/乌纱/玉佩/竹簪…) | | 🏮 **西市胡商货栈** | (-22, -3) | 雅物 + 凭证(铜镜/明珠/真迹/蜀锦/拓本/城坊图/文牒) | 店招实地建模:立柱 + 灯笼 + 牌匾(CanvasTexture 中文 STKaiti)+ 灯笼缓慢晃动。买/卖 modal 顶部显示钱包 4 币种,按类聚合商品,价格用 🪙🧵🏵 图标,买不起的灰显禁用。 ### 体力 + 风度系统 - **体力 stamina** 0-100,初始 100;每秒自动 +1 恢复(mini-game / 跑步消耗待加) - 屏右上**绿色 4px 条**实时显示 - 食物给定量回复,酒/茶/酥山额外给**临时 charm 风度**(60-180 秒 buff) ### 文房灵感 → 接入诗会 持有文房物品自动累计 poetryBonus(笔 +10、墨/纸 +5、砚 +20、唐诗集 +25、全唐诗 +35)。 - bonus ≥ **15** → 诗会内可灵思**一次**(答错时获一次重答机会,且会标红错项) - bonus ≥ **35** → 玩家直接成为"长安第一才子"(彩蛋) ### Loot 重构 旧的 REWARDS_GOOD/SMALL/CONSOL/PERFECT → 统一迁到 `LOOT_TABLES` (win/draw/lose/perfect),全部用 itemId 引用。币奖单独用 `COIN_10` / `COIN_3` / `SILK_1` token 处理。所有路径(猜拳/猜谜/对诗)共享一致 grantReward。 ## V10 · 诗酒小宴 · 飞花令 · 对对联 · 诗仙赞 街头三玩之外再开一种 **盛唐文人雅集** —— 走到 NPC 旁 `E` 开对话,到末尾会出现紫粉色按钮 **🍷 对诗**(文士 / 仕女 / 老人 / 僧人 100%,兵卒 / 农夫 30%)。点开后随机抽 3 轮,混合两种唐风玩法: | 玩法 | 形式 | |------|------| | **飞花令** | 给关键字 (花/月/风/春/江/酒/山/雪),4 句中选**含此字**的诗 | | **对对联** | 给上联,4 句中选下联(干扰项均为**其他名联的下联**,迷惑性强) | **3 巡定胜负 · 奖品分级**: | 战绩 | 级别 | 奖品池 | |------|------|--------| | 3/3 | **诗仙赞 ✦** | 🍶 一壶剑南春 / 📚 《全唐诗》/ 🖌 湖州狼毫 / 🟫 端州歙砚 / 🎨 吴道子真迹 / 🪪 诗仙赞墨色腰牌 | | 2/3 | 才情不俗 | 小赏(三文钱 / 胡饼 / 打油诗…) | | 1/3 | 勉强一巡 | 安慰(路人一笑 / 鬼脸) | | 0/3 | 颗粒无收 | 文士调侃:「公子何不饮酒,少谈诗?」 | 题库规模: - 飞花令:**8 个关键字 × 每字 ~6 含字句 + ~6 不含字句**,组合数 >180 - 对联:18 副名联(王勃 / 李白 / 王维 / 柳宗元 / 杜甫 / 白居易 / 王翰 / 王之涣 / 张九龄…) 对诗 UI 与街头小游戏统一 `.sg-card` 风格,但配色改为 **暗夜紫 + 桃花粉**,提示气泡用 **STKaiti 楷体 + 紫色左竖条**,呼应"花间一壶酒"的雅意。 ## V9 · 街头玩耍 · 猜拳猜谜 + 随机赏赐 + 行囊系统 游戏模式中靠近任意路人,按 `E` 打开对话;在对话**最后一行**会出现两枚按钮: | 按钮 | 玩法 | |------|------| | **🪨 猜拳** | 经典石剪布。你出招后,NPC 转手轮抽签 600ms 落定 → 胜 / 平 / 负 | | **🎴 猜谜** | 唐风题库(民俗谜语 + 长安史实),四选一,对错均有奖 | **胜负判定 → 不同奖品池**: - **胜** → 十文开元通宝 / 西凉铜镜 / 滕王阁序拓本 / 龙井香囊 / 葡萄酒 / 东海明珠 / 织锦帕 / 酥山 - **平** → 三文铜钱 / 胡饼 / 打油诗 / 炒栗子 / 竹簪 - **负** → 路人一笑 / "再来" / 鬼脸(安慰,无价值但有趣) NPC 角色对游戏的态度: | 角色 | 愿意陪玩 | |------|---------| | 文士 / 商贾 / 仕女 / 童子 / 农夫 / 胡商 / 货郎 / 街边路人 | 100% | | 兵卒 / 官员 / 僧侣 | 30%(性子严,但偶尔也兴致来时) | **行囊系统 (Inventory)**: - 屏幕右上 Inventory **胸牌**: `🪙 X 文 · 🎁 Y 件 · [最近 3 件 icon]` - 点击胸牌弹出**总览面板**:分行显示所有藏品(含数量×N) - 中央**赏赐 Toast** 飘字:`王翁 赏你 🪞 一面西凉铜镜` 12 题谜库: ## V8 · 入殿看展 · 第一人称 + 壁画展厅 新增三件大事: 1. **天气升级**:雨天 5-20 秒概率触发 **闪电屏闪 + 低频雷鸣**;雨/沙/雾各有风向 → 雨条斜飘、沙粒阵风吹拂、雾色阴沉 2. **第一人称 (FPS) 模式**:游戏中按 `V` 切换第三/第一人称;点击锁鼠标真实视角看世界;按 `Esc` 释放 3. **大殿 360° 展厅**:走到 5 个殿门口(含元殿 / 宣政殿 / 紫宸殿 / 大雁塔 / 曲江亭)→ 按 `F` 入展 → FPS 在展厅内自由游走,看向壁画时屏幕底部显示标题 + 注释;按 `F` 或 `Esc` 礼出展厅 ### 5 座展厅清单 | ID | 标题 | 壁画 | | --- | --- | --- | | `hanyuan` | 含元殿 · 万邦来朝 | 万邦来朝图 / 元日大朝 / 受降图 / 凤翔丹墀 | | `xuanzheng` | 宣政殿 · 常朝政务 | 常朝图 / 紫绯朝服 / 中书省草制 / 御史台 | | `zichen` | 紫宸殿 · 内朝寝兴 | 入阁仪 / 夜对 / 后宫 | | `pagoda` | 大雁塔 · 玄奘西天 | 玄奘取经图 / 译经场 / 雁塔题名 / 佛祖说法 | | `qujiang` | 曲江亭 · 文人雅集 | 丽人行 / 曲江流饮 / 杏园探花 | 每幅壁画现在是程序化占位(暖金色调底 + 题字 + 注解)。**想换真实素材**:把图片放进 `murals/`,命名 `{galleryId}_{index}.jpg`,详见 `murals/README.md`。 ## V7 · 长安行客 · RPG 模式 点击顶栏 **🎮 游戏模式** 按钮,从 4 个角色预设(**士子 / 商贾 / 仕女 / 游侠**)中挑选你的长安身份,输入名字,进入第三人称漫游: | 操作 | 键位 | | --- | --- | | 移动 | `W` `A` `S` `D` 或方向键 | | 疾走 | 长按 `Shift` | | 与最近 NPC 交互 | `E` / 空格 / 回车 | | 退出游戏 | `Esc` | - **主线任务**:《初到长安》5 步剧情链:朱雀门 → 西市张掌柜 → 大雁塔题名 → 大明宫含元殿 → 名垂长安 - **场景自动联动**:与 217 个 NPC 都可对话;不同坊里的人物会按身份(守门将/商贾/学子/儒生/百姓/官员/胡商/僧侣)说出不同的市井段子 - **任务驱动**:在朱雀门附近的兵卒、西市的商贾、大雁塔下的学子会触发任务专属台词与剧情推进 - **HUD**:左上任务条 / 下方按键提示 / 顶部 toast 通知 / 底部对话框 - **镜头**:相机从俯瞰沙盘平滑过渡到主角第三人称跟随,主角头顶有金色光环 + 箭头标识 ## 一句话技术栈 **纯前端**(HTML + Three.js + 原生 JS),**无构建步骤**,浏览器直接打开即可。 ## 如何运行 cd /Users/andyhu/Downloads/Company/han-diorama python3 -m http.server 8088 # 访问 http://localhost:8088/ ## 场景全景 (V6·三殿盛唐版) ┌─────────────────────────────────────┐ │ 🏛 紫宸殿 (内殿/皇帝寝兴) │ z=-89 │ 私密单层 · 飞檐高耸 · 4 近臣 + 琴师 │ └────────────────┬────────────────────┘ │←連廊 ┌────────────────┴────────────────────┐ │ 🏛 宣政殿 (常朝/政务) │ z=-76 │ 重檐两层 · 8 朝臣紫绯 · 4 带刀侍卫 │ └────────────────┬────────────────────┘ │←連廊 ┌────────────────┴────────────────────┐ │ 🏛 含元殿 (大朝/万邦来朝) │ z=-60 │ 三层金顶 · 龙凤丹墀 · 翔鸾栖凤双阙 │ │ 12 御林军 + 8 朝臣 + 苍松石狮 │ └────────────────┬────────────────────┘ ┌────────────────┴────────────────────┐ │ 🏯 朱雀门 (皇城南正门) │ └────────────────┬────────────────────┘ ┌────────────────┴────────────────────┐ │ ⚔️ 边塞战场 / 突厥穹庐 / 烽燧 │ └────────────────┬────────────────────┘ ┌────────┐ ┌────────────┴────────────┐ ┌─────────────────┐ │ 🐫 驼商│ │ │ │ │ │ + 🏛西市│←┤ 朱雀大街 · 22 行人坊灯 28 ├→│ 🌾 田畴 筒车曲辕犁│ │ 胡旋舞 │ │ 官吏马队 · 宵禁可见 │ │ 弯腰插秧农夫 │ └────────┘ └────────────┬─────────────┘ └─────────────────┘ ┌────────────┴─────────────┐ │ 🌊 灞河 + 渭水 + 拱桥 │ └────────────┬─────────────┘ ┌────────────────┴────────────────────┐ │ 🌅 曲江池 (西南) 🏯 大雁塔 (东南) │ │ 画舫 · 亭台 · 柳岸 · 慈恩寺 · 石狮香炉 │ └─────────────────────────────────────┘ ## 内容清单 (V6 三殿百年版) ### 🏛️ 唐代地标 - **大明宫三大殿**(V6)— 含元殿 + 宣政殿 + 紫宸殿 三层纵轴,双侧長廊相连 - **含元殿** — 三层金顶高台、龙凤丹墀龙尾道、翔鸾·栖凤双阙、12 御林军 + 8 朝臣 - **宣政殿**(新)— 重檐两层、9 柱前廊、8 紫绯朝臣 + 4 甲士 - **紫宸殿**(新)— 单层精巧高翘飞檐、4 近臣 + 仕女琴师、后花园松柏假山 - **大雁塔**(慈恩寺塔)— 7 层方塔、攒尖砖石、四面拱窗、金顶刹 - **朱雀门城楼** — 三门道、九五至尊八十一钉、重檐两层、龙凤双旗 - **曲江池** — 22×18 大水面、中央水亭、2 艘画舫、垂柳成行 - **东市/西市** — 双市制、围墙·市门牌坊·8 摊位·胡姬舞台 - **灞河 / 渭水** — 贯穿南北 + 东西的双河系统、跨河石拱桥 - **筒车 / 曲辕犁** — 唐代标志性农具 - **朱雀大街坊灯** — 28 盏路灯,夜间发光 ### 👥 人物角色 (217 NPC) - 文士 / 农夫 / 商人 / 西域胡商 / 仕女 / 进贤冠学者 / 童子 / 兵卒 / 突厥 - **胡姬胡旋舞**(4 人围圈旋转,袖飞带飘) - 弯腰插秧农夫(4 人,pose=bend / squat / kneel) - 朱雀大街 22 名行人(**宵禁时隐去**)+ 3 队官吏马队 - 含元殿御林军 12 + 紫绯朝臣 8 + 宣政殿朝臣 8 + 紫宸殿近臣 4 - 朱雀门下 6 名出入旅人 + 城上 4 名甲士 + 门外 3 骑迎送 - 慈恩寺塔前 8 名香客/僧侣 + 曲江池 8 名游赏人 ### 🎬 实时动画 (18 种) 1. 阴阳昼夜循环(日出·日落·星空) 2. 人物原地浮动 3. 旗帜飘动 + 战旗 4. 龙骨水车 + 筒车旋转 5. 烽燧夜间脉冲发光(**天宝乱期间日夜常燃**) 6. 步兵 / 骑兵路径行进 7. 鸟群盘旋 8. 桃花飘落(春季) 9. 帅帐战鼓拍动 10. 战场扬尘消散 11. 画舫水面摆动 12. 胡姬胡旋舞 13. 香炉烟柱 14. 落叶飘零(秋季) 15. 雪花飘落(冬季) 16. 萤火虫游弋(夏夜) 17. **雨滴垂落**(新,天气=雨) 18. **风沙横扫**(新,天气=沙) ### 🌙 里坊夜禁 - 22:00 - 5:00 自动进入宵禁 - 街上 22 名行人**隐去**(不见人烟) - 朱雀大街两侧 28 盏**坊灯**点亮发光 - 顶部弹出"宵禁中 · CURFEW · 街禁闭坊"徽章 ### 🌸 四季流转 | 季 | 草色 | 树色 | 粒子 | | --- | --- | --- | --- | | 春 仲春·二月 | 翠绿 0x7BA84C | 嫩柳 | 桃花瓣 | | 夏 盛夏·六月 | 深绿 0x4F7E2C | 苍翠 | 萤火虫(夜) | | 秋 秋深·九月 | 黄棕 0x9A8C3A | 金红枫叶 | 落叶 | | 冬 严冬·腊月 | 雪白 0xC8CED2 | 枯枝 | 雪花 | ### 🌧️ 天气系统 (新) | 天气 | 雾色 | 视距 | 粒子 | | --- | --- | --- | --- | | 晴 | 暗夜色 | 200-450 | — | | 雨 | 蓝灰 0x556070 | 80-320 | 380 滴垂直雨丝 | | 沙 | 沙黄 0x8a6840 | 30-180 | 240 颗沙粒横扫 | | 雾 | 苍白 0xb8c0c8 | 30-220 | — | 切换在左下角"晴雨沙雾"按钮(季节按钮上方)。 ### 📜 历史事件轴 (新) | 时代 | 年代 | 主君 | 视觉特征 | | --- | --- | --- | --- | | **贞观之治** | 627-649 | 唐太宗 | 兵力 1.6×,市场 0.8×,洁净 | | **开元盛世** | 713-741 | 唐玄宗 | 市场 1.4×,胡商繁忙,金黄 tint | | **安史之乱** | 755-763 | 玄宗→肃宗 | 兵力 2.0×,市场 0.3×,烽火常燃 | | **天宝之后** | 763-907 | 代宗以后 | 市场 0.6×,藩镇割据,苍白 tint | 顶部时间轴按钮(⏱)打开年代切换,**自动调整 NPC 分布 + 环境光 + 烽火状态**,并弹出 8 秒历史信息横幅。 ### 🗨️ 点击 NPC (新) - 217 个 NPC 全部可点击(屏幕半径 32 像素匹配) - 8 类身份各 4-6 句市井段子: - 里坊百姓 / 市井商贾 / 深闺仕女 / 士林文士 / 军中兵卒 / 孩童 / 西域胡商 / 北蕃突厥 - 点击弹出气泡(角色标签 + 段子),4.2 秒自动淡出 例: 军中·兵卒 "边塞月明夜,闻笛能让壮士落泪。" 市井·商贾 "西州瓜,安息香,要不要看看?三十文一斤。" 深闺·仕女 "今春流行高髻簪花,鬓边再贴个红色花钿。" ### 🔊 音效 (Web Audio synth) - 寺钟(早朝 6:00 / 午时 12:00 / 暮鼓 18:00)— 三泛音合成 - 关坊鼓(22:00)— 低音 + 噪声击打 - 鸡鸣(5:00)— 锯齿波频扫 - 切换场景轻铃 + 持续环境底音 - 顶部喇叭按钮可一键静音 - 弓射 mini-game 中击中靶心马蹄音 ### 📜 唐诗节点 顶部"诗"按钮开启诗心模式,9 个场景各配一首唐诗: - 朱雀大街 ·《长安古意》卢照邻 - 大明宫 ·《和贾舍人早朝大明宫之作》王维 - 大雁塔 ·《与高适薛据登慈恩寺浮图》岑参 - 曲江池 ·《丽人行》杜甫 - 东市 ·《长安道》储光羲 - 田畴 ·《观刈麦》白居易 - 朱雀门 ·《和贾至舍人早朝大明宫》杜甫 - 边塞 ·《从军行》王昌龄 - 驼商 ·《凉州词》王翰 诗签为羊皮纸色衬线竖排,浮于右上。 ### 📱 移动端适配 - ≤ 900px 自动切换:侧栏改为汉堡抽屉 - 顶部·底部 HUD 缩小重排,场景按钮横排 - OrbitControls 内置双指捏合缩放 - 切换场景自动收起侧栏 ### 🎮 小游戏 (4 款全部完成 V6) 顶部 ⊕ 按钮打开 mini-games modal: - **蹴鞠** — 点击鞠球持续高踢,连踢数记录 - **雁塔题名**(新)— 石壁描红,长安鼠标拖出"進士及第"四字(含碑文水印) - **曲江流饮**(新)— 羽觞顺曲水漂流,停下时点击赋诗(8 回,倒计圈 1.5s) - **弓射**(新)— 准星 + 拉弓蓄力 + 风向偏差,5 箭计中靶环数 每款都带退出按钮,互不干扰。 ### 🌐 镜头导览系统 - 9 个预定视点:朱雀大街 / 大明宫 / 大雁塔 / 曲江池 / 东市 / 田畴 / 朱雀门 / 边塞 / 驼商 - 三大殿专属视点(URL): - `#view=palaceAxis` — 三殿纵轴俯视 - `#view=xuanzheng` — 宣政殿前广场 - `#view=zichen` — 紫宸殿内庭 - 顶部魔术棒按钮启动自动巡游,每段约 7 秒 - URL 深链: - `#h=18` 设置初始时刻 - `#view=palace` 直跳大明宫 - `#tour=1` 启动时自动巡游 ### 🗨️ 交互系统 - **18 个**可点击热点(新增宣政殿、紫宸殿) - 每个场景独立的多人对话剧本(老者×子游 角色扮演) - 时间滑块:0-24 小时手动控制 / 切换自动模式 ### 🎮 RPG 游戏模式 (V7) - 顶部 🎮 按钮:弹出 4 角色选择卡(士子 / 商贾 / 仕女 / 游侠) - WASD 第三人称漫游,相机平滑跟随 - 主角头顶金色光环 + 箭头标识 - 走近 NPC → `E` 提示 → 弹出对话框(含背景、连续 3-5 行剧本) - 5 步主线任务《初到长安》 - 触发雁塔 mini-game 联动(题名后任务推进) - 8 类身份化 NPC 段子(兵卒/官员/商贾/学子/儒生/百姓/胡商/僧侣) - 任务面板 + Toast 通知 + 控制提示常驻 - `Esc` 退出回到上帝视角 ### 👀 FPS 第一人称 (V8) - 游戏中按 `V` 切换第三/第一人称 - 点击画布锁定鼠标(PointerLockControls)→ 鼠标看 / WASD 走 / Shift 疾走 - 头部位置 (y=1.6) + 走路微晃 - `Esc` 释放鼠标,再按 `V` 切回 TPS ### 🖼 360° 殿宇展厅 (V8) - 5 座展厅:含元殿 / 宣政殿 / 紫宸殿 / 大雁塔 / 曲江亭 - 走到殿门 8 单位内 → 屏幕显示 `F 入 XX 看壁画` - 进入展厅 = FPS + 球形房间 + 4-8 面墙挂壁画 + 中央木匾牌 - 看向壁画 (≥ 0.85 朝向 dot) → 底部弹出 **标题 + 注释卡** - 程序化壁画:暖色底 + 描金边 + 题字 + 注解,每幅独立色调 - **支持真实素材**:丢图到 `murals/`,自动替换占位 - `F` / `Esc` 礼出展厅 ### ⛈ 天气增强 (V8) - 雨天每 6-20 秒概率闪电:**屏幕白闪 220ms** + 0.8-3s 后 **低频雷鸣**(Web Audio 合成) - 雨:风向 `(-0.6, 0.3)` → 雨条整体 -7° 斜倾 - 沙:风向 `(1.4, 0.15)` 强度 3.0 → 阵风调制(gust = 1+0.5sin) - 雾:风弱,几乎静止 - 晴:微风从东吹 ## UI / 控制 | 操作 | 效果 | | ---- | ---- | | 拖动 / 鼠标右键 | 旋转视角 | | 滚轮 / 双指捏合 | 缩放(受限) | | 鼠标左键 / 触摸 | 点击物体看历史介绍 / 点击 NPC 看段子 | | 右侧 1-9 编号按钮 | 切换 9 大场景 | | 顶部 ☀ 图标 | 切换自动昼夜 | | 顶部 ✦ 魔术棒图标 | 启动自动巡游 | | 顶部 ◁ 喇叭图标 | 音效开关 | | 顶部 ☷ 诗图标 | 切换诗心模式 | | 顶部 ⊕ 圈图标 | 打开小游戏 | | 顶部 ⏱ 时间轴图标 | 打开历史事件轴 | | 顶部 🎮 角色图标 | 进入 RPG 游戏模式 | | 左下春夏秋冬 | 切换季节 | | 左下晴雨沙雾 | 切换天气 | | 底部时间滑块 | 手动调节小时 | | **游戏模式** WASD / 方向键 | 控制主角行走 | | **游戏模式** Shift | 长按疾走 | | **游戏模式** E / Space / Enter | 与最近 NPC 对话 | | **游戏模式** V | 切换 第三人称 / 第一人称 | | **游戏模式** F | 入殿看壁画 / 退展厅 | | **游戏模式** Esc | 释放鼠标 / 退展厅 / 退游戏 | | **FPS 模式** 点击画布 | 锁定鼠标进入真实视角 | | **FPS 模式** 鼠标 | 转头看世界 | | **展厅模式** 鼠标 + WASD | 在 360° 房间内自由游走,看向壁画看注释 | | `#h=X` URL 参数 | 设定初始小时(0-23.99) | | `#view=KEY` | 直跳视点 | | `#tour=1` | 启动时自动巡游 | ## 文件结构 han-diorama/ ├── index.html ← UI 框架 + CSS + 顶栏底栏 + 场景栏 + 时间滑块 + modal/overlay + 游戏模式 HUD ├── scene.js ← Three.js 主程序(~6600 行) └── README.md ## 渲染特性 - **正交相机**(OrthographicCamera)+ frustum=64,sandbox 俯视感(游戏模式相机 zoom=1.4 + 平滑 lerp 跟随主角) - 阴影范围 ±100(覆盖 120×160 单位地图) - 雾默认 200-450 单位(天气切换会变窄) - 后期:OutlinePass(拾取高亮)+ UnrealBloom(灯笼 / 烽火 / 金顶辉光) - 性能:~1200+ 网格、217 NPC、移动端 30+ FPS - 游戏模式:WASD 输入捕获 + 60Hz 主角位姿更新 + 屏幕空间最近 NPC 查询 ## Phase 11 路线(继续可做) - [ ] **Mode 1 区分**:把现有漫游变成"5 主题策展导览"(自动相机巡线 + 字幕 + 解说音) - [ ] **价格浮动**:早市 / 午市 / 晚市差价,跨市套利 - [ ] **NPC 雇佣 / 短工**:上午帮工 → 下午结算 → 给铜钱 - [ ] **科举系统**:以一次性诗会大测验解锁"进士印"凭证 - [ ] **接入名家 NPC**:李白 / 杜甫 / 王维,各开诗仙赞解锁支线 - [ ] **安史之乱触发 cutscene**:财产损失判定 + 选阵营 - [ ] **着装影响 NPC 称呼**:着青衫 → 文士叫你"君";着乌纱 → 商贾叫你"大人" ## Phase 10 路线(继续可做) - [ ] **酒令系统**:曲水流觞中真的实现行酒令 (击鼓传花 / 五色筹 / 雅令俗令分级) - [ ] **诗词填空**:给一句缺 1-2 字的名句,玩家从 4 字中补出(更高级别) - [ ] **诗仙赞累积**:累计获得 3 张诗仙赞墨色腰牌 → 解锁李白 NPC 邀你登黄鹤楼 - [ ] **更大诗库**:扩到 50 副对联 + 16 个飞花令关键字(添风/雨/夜/星/泪/愁/梦/酒等) - [ ] **NPC 出题难度**:根据 NPC 角色生成不同难度(文士出冷门,童子出热门) ## Phase 9 路线(继续可做) - [ ] **更多街头游戏**:投壶 / 双陆 / 蹴鞠 / 围棋开局猜白先黑先 - [ ] **赏品装备化**:腰牌 / 锦帕 → 解锁特殊对话或区域 - [ ] **NPC 个性表情**:胜场加倍兴奋、败场摆鬼脸的连续表情动画 - [ ] **连胜奖品爆发**:连续 3 胜后概率掉落"东海明珠"等顶级藏品 ## Phase 8 路线(继续可做) 1. **真实壁画素材** — 用户提供图片后接入 5 座展厅 2. **多支线任务** — 加"长安八景巡礼""坊间公案"等支线 3. **战斗系统** — 边塞场景接入弓射 mini-game 作为简易战斗 4. **多人物联动剧情** — 主角间互动 5. **物品栏 / 装备** — 拾取笔墨纸砚、腰牌、钱袋 6. **更多殿宇展厅** — 麟德殿 / 太极殿 / 兴庆宫 7. **天气过渡动画** — 切天气时雾参数渐变 8. **历史事件 cutscene** — 安史之乱触发后烽火台炸开 9. **VR / WebXR** — 头显沉浸式漫游 10. **多人联机** — WebSocket 同步漫游 11. **碰撞检测** — 让主角不能穿墙穿建筑 12. **环境音** — 不同坊里的环境声(市集喧哗 / 寺院钟鸣 / 边塞马蹄) ## GitHub 部署 静态站点可托管在 **GitHub Pages**(含 CI 自动发布)。步骤见 [docs/GITHUB_DEPLOY.md](docs/GITHUB_DEPLOY.md)。 gh auth login chmod +x scripts/push-to-github.sh ./scripts/push-to-github.sh tang-changan # 仓库名可自定 线上示例 URL:`https://<你的用户名>.github.io/tang-changan/index.html?world=new` ## 致谢 - Three.js / OrbitControls / postprocessing / EffectComposer - 营造法式 / 唐两京城坊考 / 大唐六典 / 资治通鉴 — 历史参考 - 《全唐诗》 — 诗歌素材
标签:3D微缩模型, Agora, RPG, Web游戏, 互动沙盘, 历史科普, 多模态安全, 移动端适配, 自定义脚本