diff --git a/Packages/manifest.json b/Packages/manifest.json index 825b975..fd175b3 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,13 +1,15 @@ { "dependencies": { + "cn.tuanjie.ai.generators": "file:../.codely-cli/extensions/TJGenerators/Packages/cn.tuanjie.ai.generators", + "cn.tuanjie.codely.bridge": "1.0.74", "com.unity.collab-proxy": "2.6.0", "com.unity.feature.mobile": "1.0.0", - "com.unity.ide.rider": "3.0.31", + "com.unity.ide.rider": "3.0.36", "com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.vscode": "1.2.5", "com.unity.test-framework": "1.1.33", - "com.unity.textmeshpro": "3.0.7", - "com.unity.timeline": "1.7.6", + "com.unity.textmeshpro": "3.0.9", + "com.unity.timeline": "1.7.7", "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.9.4", "com.unity.modules.ai": "1.0.0", @@ -19,6 +21,7 @@ "com.unity.modules.director": "1.0.0", "com.unity.modules.imageconversion": "1.0.0", "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.infinity": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0", "com.unity.modules.particlesystem": "1.0.0", "com.unity.modules.physics": "1.0.0", @@ -39,8 +42,6 @@ "com.unity.modules.video": "1.0.0", "com.unity.modules.vr": "1.0.0", "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0", - "cn.tuanjie.codely.bridge": "1.0.74", - "cn.tuanjie.ai.generators": "file:../.codely-cli/extensions/TJGenerators/Packages/cn.tuanjie.ai.generators" + "com.unity.modules.xr": "1.0.0" } } diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 0bd8dab..1db1c34 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -58,13 +58,13 @@ "depth": 0, "source": "builtin", "dependencies": { - "com.unity.mobile.android-logcat": "1.4.3", + "com.unity.mobile.android-logcat": "1.4.5", "com.unity.adaptiveperformance": "4.0.1", - "com.unity.mobile.notifications": "2.3.2" + "com.unity.mobile.notifications": "2.4.0" } }, "com.unity.ide.rider": { - "version": "3.0.31", + "version": "3.0.36", "depth": 0, "source": "registry", "dependencies": { @@ -89,14 +89,14 @@ "url": "https://packages.tuanjie.cn" }, "com.unity.mobile.android-logcat": { - "version": "1.4.3", + "version": "1.4.5", "depth": 1, "source": "registry", "dependencies": {}, "url": "https://packages.tuanjie.cn" }, "com.unity.mobile.notifications": { - "version": "2.3.2", + "version": "2.4.0", "depth": 1, "source": "registry", "dependencies": { @@ -132,7 +132,7 @@ "url": "https://packages.tuanjie.cn" }, "com.unity.textmeshpro": { - "version": "3.0.7", + "version": "3.0.9", "depth": 0, "source": "registry", "dependencies": { @@ -141,7 +141,7 @@ "url": "https://packages.tuanjie.cn" }, "com.unity.timeline": { - "version": "1.7.6", + "version": "1.7.7", "depth": 0, "source": "registry", "dependencies": { @@ -193,10 +193,7 @@ "version": "1.0.0", "depth": 0, "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.animation": "1.0.0" - } + "dependencies": {} }, "com.unity.modules.audio": { "version": "1.0.0", @@ -233,6 +230,12 @@ "source": "builtin", "dependencies": {} }, + "com.unity.modules.infinity": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, "com.unity.modules.jsonserialize": { "version": "1.0.0", "depth": 0, diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index d9a9dc0..a99fce5 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,3 +1,3 @@ -m_EditorVersion: 2022.3.48t1 -m_EditorVersionWithRevision: 2022.3.48t1 (8ad5b9288c6b) -m_TuanjieEditorVersion: 1.3.4 +m_EditorVersion: 2022.3.62t12 +m_EditorVersionWithRevision: 2022.3.62t12 (ab02e98c9779) +m_TuanjieEditorVersion: 1.10.0 diff --git a/ProjectSettings/ThreadInfoSettings.asset b/ProjectSettings/ThreadInfoSettings.asset new file mode 100644 index 0000000..3facff6 --- /dev/null +++ b/ProjectSettings/ThreadInfoSettings.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!9625 &1 +ThreadInfoSettings: + m_ObjectHideFlags: 0 + m_TargetPlatform: 0 + m_HMIAndroidPlatformThreadInfoSettings: + m_BasePlatformThreadInfoSettings: + m_MainThreadPriority: -2 + m_JobWorkerThreadPriority: 0 + m_GFXDeviceWorkerThreadPriority: -2 + m_MainThreadAffinity: 2 + m_JobWorkerThreadAffinity: 2 + m_GFXDeviceWorkerThreadAffinity: 2 + m_AndroidChoreographerThreadPriority: 0 + m_AndroidChoreographerThreadAffinity: 0 + m_EmbeddedLinuxPlatformThreadInfoSettings: + m_BasePlatformThreadInfoSettings: + m_MainThreadPriority: 0 + m_JobWorkerThreadPriority: 0 + m_GFXDeviceWorkerThreadPriority: -2 + m_MainThreadAffinity: 2 + m_JobWorkerThreadAffinity: 0 + m_GFXDeviceWorkerThreadAffinity: 2 + m_QnxPlatformThreadInfoSettings: + m_BasePlatformThreadInfoSettings: + m_MainThreadPriority: 10 + m_JobWorkerThreadPriority: 10 + m_GFXDeviceWorkerThreadPriority: 50 + m_MainThreadAffinity: 2 + m_JobWorkerThreadAffinity: 0 + m_GFXDeviceWorkerThreadAffinity: 2 + m_OpenHarmonyPlatformThreadInfoSettings: + m_BasePlatformThreadInfoSettings: + m_MainThreadPriority: 0 + m_JobWorkerThreadPriority: 0 + m_GFXDeviceWorkerThreadPriority: -2 + m_MainThreadAffinity: 2 + m_JobWorkerThreadAffinity: 2 + m_GFXDeviceWorkerThreadAffinity: 2 diff --git a/小游戏可行性方案.md b/小游戏可行性方案.md new file mode 100644 index 0000000..641af63 --- /dev/null +++ b/小游戏可行性方案.md @@ -0,0 +1,386 @@ +# 微信/抖音小游戏可行性方案:法师捕获召唤闯关 + +## 1. 项目定位 + +目标做一款适合微信小游戏、抖音小游戏的轻量 3D 闯关游戏。 + +核心卖点: + +- 玩家扮演法师。 +- 打倒或削弱敌人后,可以捕获敌人单位。 +- 捕获后的单位可在战斗中召唤出来协助作战。 +- 召唤单位消耗法力,法力会随时间自动恢复。 +- 以短关卡推进,适合碎片化游玩和广告变现。 + +一句话概括: + +> 轻量版“捕获 + 召唤 + 闯关”的 3D 卡通动作策略小游戏。 + +## 2. 核心玩法判断 + +这个方向可行,但不建议做成开放世界或复杂解谜大作。小游戏平台更适合: + +- 单局时间短。 +- 操作简单。 +- 目标明确。 +- 关卡推进快。 +- 内容可以持续扩展。 + +因此推荐形态是: + +> 俯视角 / 斜俯视角 3D 关卡制动作策略游戏。 + +玩家主要体验不是复杂操作,而是: + +- 走位躲避。 +- 普攻削血。 +- 捕获敌人。 +- 选择合适单位召唤。 +- 用有限法力解决当前战斗。 + +## 3. MVP 核心循环 + +第一版只验证核心是否好玩,不做过多外围系统。 + +基础循环: + +```text +进入关卡 +→ 遇到敌人 +→ 主角自动普攻削血 +→ 敌人进入可捕获状态 +→ 玩家捕获单位 +→ 消耗法力召唤已捕获单位 +→ 单位协助战斗 +→ 通关获得奖励 +→ 解锁/强化单位 +→ 进入下一关 +``` + +MVP 必须具备: + +1. 主角移动。 +2. 主角简单自动普攻。 +3. 敌人血量与死亡。 +4. 敌人残血捕获。 +5. 单位收集列表。 +6. 法力自动恢复。 +7. 消耗法力召唤单位。 +8. 至少 3 种敌人/可召唤单位。 +9. 至少 5 个测试关卡。 +10. 简单胜负条件。 + +## 4. 主角设计 + +### 4.1 主角是否需要攻击能力 + +需要,但第一版只做简单普攻。 + +理由: + +- 没有普攻,玩家开局或单位死亡后会失去行动能力。 +- 捕获系统需要玩家先削弱敌人。 +- 普攻能保证玩家持续参与,而不是只等法力恢复。 +- 主角不应成为主要输出,否则召唤系统价值会下降。 + +### 4.2 推荐定位 + +主角是“指挥型法师”: + +- 能自保。 +- 能削血。 +- 能补刀。 +- 真正的战斗主力来自召唤单位。 + +输出占比建议: + +| 来源 | 占比 | +|---|---:| +| 主角普攻 | 30% | +| 召唤单位 | 60% | +| 法术/道具 | 10% | + +### 4.3 第一版主角能力 + +- 移动:虚拟摇杆或拖拽移动。 +- 普攻:自动锁定最近敌人,发射魔法弹。 +- 捕获:敌人低血量时点击捕获按钮。 +- 召唤:选择已捕获单位,在目标位置放置。 + +暂不做复杂连招、装备技能树和多主动技能。 + +## 5. 法力系统 + +法力是召唤单位的核心资源。 + +### 5.1 基础规则 + +- 法力随时间自动恢复。 +- 不同单位消耗不同法力。 +- 法力有上限。 +- 召唤后立即扣除法力。 +- 强单位消耗高,弱单位消耗低。 + +### 5.2 推荐初始数值 + +| 参数 | 建议值 | +|---|---:| +| 初始法力上限 | 10 | +| 初始法力恢复 | 1 点 / 秒 | +| 小怪召唤消耗 | 2-3 | +| 远程单位消耗 | 3-4 | +| 坦克单位消耗 | 4-5 | +| 精英单位消耗 | 6-8 | + +### 5.3 设计目的 + +法力系统要制造选择: + +- 是马上召唤两个小怪? +- 还是攒法力召唤一个强力单位? +- 是用坦克挡伤害? +- 还是用远程单位补输出? + +## 6. 捕获系统 + +捕获是项目最有辨识度的玩法。 + +### 6.1 第一版捕获规则 + +推荐简单规则: + +- 敌人血量低于 30% 时进入可捕获状态。 +- 可捕获状态显示明显特效或图标。 +- 玩家点击捕获按钮后尝试捕获。 +- 普通敌人捕获成功率高。 +- 精英敌人捕获成功率低或需要通关后解锁。 + +### 6.2 MVP 简化方案 + +第一版可以先做确定性捕获: + +```text +敌人血量低于 30% → 点击捕获 → 100% 成功 +``` + +这样方便验证玩法闭环。后续再加入概率、品质、道具等复杂机制。 + +### 6.3 捕获后的单位 + +捕获后进入单位池: + +- 可以在当前关卡继续召唤。 +- 也可以进入关卡外图鉴。 +- 同类单位可以转化为升级材料。 + +## 7. 召唤单位设计 + +第一版建议只做 3-5 种单位,保证差异明显。 + +| 单位 | 定位 | 特点 | 法力消耗 | +|---|---|---|---:| +| 小史莱姆 | 低费近战 | 便宜、数量多、伤害低 | 2 | +| 蓝色怪物 | 近战战士 | 均衡输出与血量 | 3 | +| 石头怪 | 坦克 | 血厚、移速慢 | 5 | +| 弓箭手 | 远程输出 | 脆皮、站后排 | 4 | +| 冰霜怪 | 控制 | 攻击带减速 | 5 | + +MVP 可以先做: + +1. 近战小怪。 +2. 坦克小怪。 +3. 远程小怪。 + +只要三种单位的战斗感受不同,就能验证策略性。 + +## 8. 关卡结构 + +### 8.1 单关时长 + +小游戏适合短关卡: + +| 类型 | 时长 | +|---|---:| +| 普通关 | 1-2 分钟 | +| 精英关 | 2-3 分钟 | +| Boss 关 | 3-5 分钟 | + +### 8.2 第一版关卡类型 + +推荐先做闯关型: + +- 每关一个小地图。 +- 玩家从入口进入。 +- 击败全部敌人或击败 Boss 后通关。 +- 通关后获得金币、经验、单位碎片。 + +### 8.3 关卡变化方式 + +早期不需要大地图,靠以下内容制造变化: + +- 敌人组合变化。 +- 障碍物位置变化。 +- 地形大小变化。 +- 陷阱和机关。 +- Boss 技能变化。 + +## 9. 成长系统 + +第一版成长不要太重,避免拖慢开发。 + +### 9.1 法师成长 + +- 最大生命值。 +- 普攻伤害。 +- 法力上限。 +- 法力恢复速度。 +- 捕获范围。 + +### 9.2 单位成长 + +- 单位等级。 +- 生命值提升。 +- 攻击力提升。 +- 特殊效果增强。 + +### 9.3 图鉴系统 + +图鉴是很适合这个玩法的长期目标: + +- 收集过的单位会点亮图鉴。 +- 图鉴给少量属性加成。 +- 稀有单位作为关卡目标。 + +## 10. 广告变现设计 + +这个玩法可以做广告变现,尤其适合激励视频广告。 + +### 10.1 推荐广告点 + +| 广告位 | 说明 | 推荐程度 | +|---|---|---| +| 失败复活 | 死亡后看广告复活一次 | 高 | +| 通关奖励翻倍 | 通关后金币/材料翻倍 | 高 | +| 额外捕获机会 | 捕获失败后看广告再试一次 | 中高 | +| 每日奖励翻倍 | 每日登录奖励翻倍 | 中 | +| 体力/门票补充 | 体力不足时看广告补充 | 中 | +| 临时法力加速 | 本关法力恢复短时间提升 | 中 | + +### 10.2 不建议的广告 + +不建议做: + +- 关卡中强制插屏。 +- 每一两分钟强制广告。 +- 战斗中频繁打断操作。 + +小游戏前期更适合激励广告,让玩家主动选择看广告。 + +## 11. 技术可行性 + +### 11.1 适合小游戏的原因 + +- 玩法可以做成小地图短关卡。 +- 角色数量可控。 +- 3D 卡通低模风格适合性能控制。 +- 系统可以逐步扩展,不必一开始做大世界。 + +### 11.2 风险点 + +| 风险 | 说明 | 规避方式 | +|---|---|---| +| 操作复杂 | 移动、攻击、捕获、召唤同时存在 | 普攻自动化,玩家只管移动、捕获、召唤 | +| 单位太多导致混乱 | 召唤物数量过多会遮挡和卡顿 | 限制同时在场数量或总法力 | +| 关卡重复 | 只打怪容易腻 | 增加敌人组合、地形、Boss、词缀 | +| 平衡困难 | 捕获和召唤容易过强 | 用法力消耗、召唤上限、冷却控制 | +| 性能压力 | 小游戏平台性能有限 | 低模、少骨骼、少特效、限制同屏单位 | + +### 11.3 性能建议 + +- 采用低模 3D 卡通风格。 +- 同屏敌人 + 召唤物建议控制在 20 个以内。 +- 单位动画简单化。 +- 特效使用少量粒子或贴片动画。 +- 地图使用简单 Mesh / Cube / Plane 组合。 +- UI 和战斗逻辑尽量轻量。 + +## 12. 推荐开发阶段 + +### 阶段 1:核心原型 + +目标:验证“捕获 + 召唤”是否好玩。 + +内容: + +- 一个测试地图。 +- 一个主角。 +- 三种敌人。 +- 自动普攻。 +- 残血捕获。 +- 法力恢复。 +- 召唤单位。 +- 一个胜负流程。 + +### 阶段 2:关卡 MVP + +目标:做出可连续玩的体验。 + +内容: + +- 5-10 个关卡。 +- 1 个 Boss。 +- 简单成长系统。 +- 单位图鉴雏形。 +- 通关奖励。 + +### 阶段 3:小游戏商业化测试 + +目标:验证留存和广告点。 + +内容: + +- 失败复活广告。 +- 通关奖励翻倍广告。 +- 每日奖励。 +- 基础数据埋点。 + +### 阶段 4:内容扩展 + +目标:增强长期游玩。 + +内容: + +- 更多单位。 +- 更多 Boss。 +- 关卡词缀。 +- 每日挑战。 +- 单位升级和稀有度。 + +## 13. 当前项目建议 + +当前项目还处于早期,建议不要急着做完整游戏系统。 + +最优先事项: + +1. 确定角色控制方式。 +2. 做一个 40x40 的测试地图。 +3. 让蓝色怪物作为第一个敌人/召唤单位。 +4. 做主角自动普攻。 +5. 做敌人残血捕获。 +6. 做法力条和召唤按钮。 + +第一阶段目标不是好看,而是验证: + +> 玩家是否愿意为了捕获单位而继续打下一关。 + +## 14. 最终建议 + +这个项目方向可行,适合做小游戏。 + +建议坚持三个原则: + +1. **主角简单**:移动 + 自动普攻 + 捕获 + 召唤。 +2. **单位有差异**:近战、坦克、远程、控制逐步扩展。 +3. **关卡短平快**:1-3 分钟一局,适合广告和碎片化游玩。 + +第一版不要追求复杂剧情、大地图和大量角色。先把“捕获敌人并召唤出来战斗”的核心爽点做出来,再决定是否扩展为更大的项目。