野生遭遇系统
遭遇系统决定了玩家探索世界时何时以及出现哪些野生怪兽。MCE 支持多种遭遇方式、可配置的概率表、等级范围和时间段遭遇。
遭遇机制
- 玩家走在有遭遇数据的地块上。
- 每一步,系统根据遭遇率进行判定。
- 如果判定成功,根据加权概率从地块的遭遇表中选择一只怪兽。
- 使用选中怪兽的物种、等级和形态创建
BattleParameters对象。 BattleLauncher切换到战斗场景。
WildEncountersSet
WildEncountersSet ScriptableObject 定义了给定区域的遭遇表:
创建路径:Assets > Create > OpenMon > Wild Encounters Set
每个条目包含:
| 字段 | 描述 |
|---|---|
| Monster | 对 MonsterEntry ScriptableObject 的引用 |
| Min Level | 野生怪兽的最低等级 |
| Max Level | 野生怪兽的最高等级 |
| Probability | 此条目的相对权重(越高 = 越常见) |
每次遭遇触发时,实际等级在最低和最高之间随机选择。
概率计算
概率是相对权重,不是百分比。系统将所有权重求和并计算每个条目的几率:
几率 = 条目权重 / 所有权重之和
示例表:
| 怪兽 | 权重 | 实际几率 |
|---|---|---|
| Leafpup | 40 | 40/100 = 40% |
| Windling | 30 | 30/100 = 30% |
| Silkworm | 20 | 20/100 = 20% |
| Sparkbit | 10 | 10/100 = 10% |
遭遇类型
MCE 通过 EncounterType 枚举支持不同的遭遇方式:
| 类型 | 触发方式 | 描述 |
|---|---|---|
| Walking | 在高草丛或洞穴中行走 | 标准大世界遭遇 |
| Surfing | 在水面地块上冲浪 | 水面遭遇 |
| Fishing | 面对水面使用钓鱼竿 | 基于钓竿的遭遇(破旧钓竿、好钓竿、超级钓竿) |
| RockSmash | 对可碎岩石使用碎岩 | 基于岩石的遭遇 |
| Headbutt | 对树使用头槌 | 基于树木的遭遇 |
每个 WildEncountersSet 可以按类型分离遭遇。只有匹配当前行为(行走、冲浪、钓鱼)的遭遇会被考虑。
设置遭遇区域
方法 1:EncounterTile 组件
- 在场景中,在地图层级结构中创建一个空 GameObject。
- 添加
EncounterTile组件。 - 将
WildEncountersSet分配给 Encounters 字段。 - 调整遭遇区域的位置和大小以覆盖所需地块。
方法 2:SceneInfo 默 认遭遇
每个场景的 SceneInfo 可以设置默认的 WildEncountersSet。场景中任何可行走的草地地块都将使用此遭遇表,除非被特定的 EncounterTile 覆盖。
方法 3:按地块遭遇
如需精细控制,你可以为同一地图的不同区域分配不同的遭遇配置。放置多个 EncounterTile 组件覆盖不同区域即可。
遭遇率
遭遇率控制每步触发遭遇的频率:
- 基础率:按遭遇区域配置(典型范围:5-25%)。
- 修正值:道具(例如虫除剂将概率降为 0%)、特性(例如恶臭降低概率)和道具(例如洁净之符)。
- 步数计数器:系统追踪自上次遭遇以来的步数。长时间没有遭遇后,概率会略微提高以防止过长的空档。
时间段遭遇
不同的怪兽可以在不同的时间段出现:
| 时段 | 小时 |
|---|---|
| 早晨 | 06:00 - 11:59 |
| 白天 | 12:00 - 17:59 |
| 傍晚 | 18:00 - 20:59 |
| 夜晚 | 21:00 - 05:59 |
通过为每个时段创建单独的 WildEncountersSet 资源并通过遭遇区域的时间段配置进行分配来配置基于时间的遭遇。
形态遭遇
某些物种有根据条件不同而外观不同的形态。EncounterFormCalculator 决定野生怪兽以哪种形态出现:
- 地区形态:基于地图的区域标签。
- 季节形态:基于游戏内日历。
- 随机形态:从可用形态中随机选择。
使用 SingleFormEncounter 组件在遭遇条目中强制指定特定形态。
特殊遭遇模式
钓鱼
钓鱼遭遇要求玩家面对水面地块使用钓鱼竿道具:
- 创建包含
EncounterType.Fishing条目的WildEncountersSet。 - 将其分配给水域的遭遇配置。
- 不同等级的钓竿(破旧钓竿、好钓竿、超级钓竿)筛选可用的条目。