1
This commit is contained in:
@@ -294,6 +294,14 @@ public class MonsterContral : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ⭐ 是否延迟注册入鱼列表(子类控制,默认false=OnlyFish 创建时立即注册,现有鱼零影响)。
|
||||
/// true=CreateFishManager.OnlyFish 跳过 RegisterFishInstance,
|
||||
/// 由子类的激活方法(如 StealthBossControl.ActivateBoss)显式补注册。
|
||||
/// 潜行Boss用:激活前不入鱼列表 → 自动锁定枚举/技能选鱼/服务端击杀通知全部找不到它。
|
||||
/// </summary>
|
||||
public virtual bool DeferFishRegister => false;
|
||||
|
||||
/// <summary>
|
||||
/// 切换锁定点(不切换锁定对象)。
|
||||
/// ⭐ 用于小白龙等切换模型/动画片段后锁定点也随之变化的情况:
|
||||
|
||||
@@ -105,8 +105,12 @@ public class MonsterControl_BossBase : MonsterContral
|
||||
isLocalCoin = false;
|
||||
killerSitPos = -1;
|
||||
|
||||
var res = FishResourcesData.fishResourcesDatasDic[fishTypeID];
|
||||
if (res.showAudio != null && res.showAudio.Count > 0)
|
||||
// ⭐ TryGetValue 判空:fishTypeID 未配置的 Boss(如 7005 预制体 fishTypeID=0)直接索引会抛
|
||||
// KeyNotFoundException——OnEnable 是 Unity 生命周期回调,异常会中断整条 base 调用链,
|
||||
// 子类(如 StealthBossControl)在 base.OnEnable() 之后的潜行初始化会全部跳过,潜行失效。
|
||||
// 查不到时仅跳过出场音效,不影响其他逻辑
|
||||
if (FishResourcesData.fishResourcesDatasDic.TryGetValue(fishTypeID, out var res)
|
||||
&& res.showAudio != null && res.showAudio.Count > 0)
|
||||
AudioManager.Instance.PlayerFX(res.showAudio[Random.Range(0, res.showAudio.Count)]);
|
||||
}
|
||||
|
||||
|
||||
@@ -1039,8 +1039,10 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
}
|
||||
|
||||
mc.fishenum = (FishTypeEnum)fishType.fishType;
|
||||
// 按鱼类型放入对应字典
|
||||
RegisterFishInstance(mc, fishType.fishType);
|
||||
// ⭐ 潜行Boss(DeferFishRegister=true)跳过注册:等子类 ActivateBoss() 激活时再入列表。
|
||||
// 激活前不在鱼列表 → 自动锁定枚举/技能选鱼/服务端击杀通知全部找不到此Boss
|
||||
if (!mc.DeferFishRegister)
|
||||
RegisterFishInstance(mc, fishType.fishType);
|
||||
|
||||
mc.Init(createFishData.moveLineId, spawnDic[createFishData.fishNumber].times);
|
||||
|
||||
@@ -1055,8 +1057,11 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>将鱼实例注册到全局字典及对应分类字典。</summary>
|
||||
private void RegisterFishInstance(MonsterContral mc, int fishTypeId)
|
||||
/// <summary>
|
||||
/// 将鱼实例注册到全局字典及对应分类字典。
|
||||
/// ⭐ public:潜行Boss(DeferFishRegister=true)由子类 ActivateBoss() 激活时显式调用补注册。
|
||||
/// </summary>
|
||||
public void RegisterFishInstance(MonsterContral mc, int fishTypeId)
|
||||
{
|
||||
// ⭐ 检测 guid 冲突:如果 guid 已存在,说明有重复出鱼(可能是 sync 模式重发),
|
||||
// 旧鱼会被覆盖变成野鱼(无法通过 Id_DieFish_NotFX 销毁)
|
||||
@@ -1809,6 +1814,11 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
// ⭐ 清除座位锁定引用:炮台不再对着死亡的鱼
|
||||
ClearLockOnFish(fishId);
|
||||
|
||||
// ⭐ 死亡优先于冰冻:见 Ws_DieFish 里的同名说明,否则冰冻期间被打死的鱼
|
||||
// 动画流程被 speed=0/时间轴定格卡住,可能不消失
|
||||
if (isFrozen)
|
||||
currGameType?.UnfreezeFishAnimations(monster);
|
||||
|
||||
// 👁 调试:记录每架掉金币飞机的实际坐标,便于对比"其他位置掉金币"来源
|
||||
Debug.Log($"[掉金币坐标] fishId={fishId} 飞机坐标={monster.transform.position} 金币飞向={v3Point} isLocal={isLocal} 调用栈={System.Environment.StackTrace}");
|
||||
|
||||
@@ -2339,6 +2349,14 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
if (!dieFishCalled)
|
||||
monster.DieFish(killFish);
|
||||
|
||||
// ⭐ 冰冻中被打死的鱼必须脱离冰冻定格(死亡优先于冰冻):
|
||||
// 冰冻是把动画停住(Animator.speed=0 / Timeline 定格 / Spine timeScale=0),
|
||||
// 而不少鱼的"消失"依赖动画流程推进,例如雷皇龙/金龙靠 FLZY_BOSS_AnimatorLeave
|
||||
// 的 Animator 状态退出回调回池 → 不停下来状态机永不退出 → 鱼打死了也不消失。
|
||||
// 放在 DieFish 之后:要覆盖掉个别 Boss 在自己的 DieFish 里设置的 animator.speed=0。
|
||||
if (isFrozen)
|
||||
currGameType?.UnfreezeFishAnimations(monster);
|
||||
|
||||
MonsterDieList.Instance.SmallHuangYiHuang(
|
||||
monster.transform.position,
|
||||
monster.monsterData.fishTypeConfig.fishNumber, 1000);
|
||||
|
||||
Reference in New Issue
Block a user