2026-06-18 19:33:39 +08:00
|
|
|
using Assets.MyGame.Scripts.Net.WebResponses;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class DefaultBossControl : MonsterControl_BossBase
|
|
|
|
|
{
|
2026-09-11 14:25:06 +08:00
|
|
|
// ================================================================
|
|
|
|
|
// ⭐ 翻转排查日志(临时):ischild0=true 时朝向逻辑旋转的是第0个子物体,
|
|
|
|
|
// 本体(transform)不被 ApplyFacingDirection 触碰,日志全部观测 child0
|
|
|
|
|
// ================================================================
|
2026-06-18 19:33:39 +08:00
|
|
|
|
2026-09-11 14:25:06 +08:00
|
|
|
/// <summary>翻转排查:child0 上一帧的世界旋转与缩放(突变时打印,捕获翻转瞬间)</summary>
|
|
|
|
|
private Quaternion _dbgLastRot;
|
|
|
|
|
private Vector3 _dbgLastScale;
|
|
|
|
|
private bool _dbgHasLast;
|
|
|
|
|
|
|
|
|
|
/// <summary>调试用:获取第0个子物体(与朝向逻辑的 _cachedChild 同源)</summary>
|
|
|
|
|
private Transform DbgChild => transform.childCount > 0 ? transform.GetChild(0) : null;
|
2026-06-18 19:33:39 +08:00
|
|
|
|
|
|
|
|
public override void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
base.OnEnable();
|
2026-09-11 14:25:06 +08:00
|
|
|
_dbgHasLast = false;
|
2026-06-18 19:33:39 +08:00
|
|
|
|
2026-09-11 14:25:06 +08:00
|
|
|
// ⭐ 出场状态:child0 是实际被旋转的对象
|
|
|
|
|
var c = DbgChild;
|
|
|
|
|
if (c != null)
|
|
|
|
|
{
|
|
|
|
|
Debug.Log($"[Boss翻转排查] OnEnable guid={guid} child0 " +
|
|
|
|
|
$"localScale={c.localScale.ToString("F3")} localEuler={c.localEulerAngles.ToString("F1")} " +
|
|
|
|
|
$"worldEuler={c.rotation.eulerAngles.ToString("F1")} | 本体 scale={transform.localScale.ToString("F3")} " +
|
|
|
|
|
$"forwordXYZ=[{forwordXYZ}] isMove={isMove}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Debug.Log($"[Boss翻转排查] OnEnable guid={guid} 无child0! 本体localScale={transform.localScale.ToString("F3")} forwordXYZ=[{forwordXYZ}]");
|
|
|
|
|
}
|
2026-06-18 19:33:39 +08:00
|
|
|
}
|
2026-09-11 14:25:06 +08:00
|
|
|
|
|
|
|
|
public override void Init(string pathId, float time, bool isyuzhen = false, string yzID = "")
|
|
|
|
|
{
|
|
|
|
|
base.Init(pathId, time, isyuzhen, yzID);
|
|
|
|
|
|
|
|
|
|
// ⭐ Init 后状态:forwordXYZ 配了轴 → IsRouteFlipBoss=false → 本体不做奇偶翻转,
|
|
|
|
|
// 朝向完全由 ApplyFacingDirection 的六分支每帧驱动 child0;
|
|
|
|
|
// forwordXYZ 为空 → Boss走默认分支return,child0 保持预制体姿态
|
|
|
|
|
var c = DbgChild;
|
|
|
|
|
Debug.Log($"[Boss翻转排查] Init guid={guid} pathId={pathId} isyuzhen={isyuzhen} yzID={yzID} " +
|
|
|
|
|
$"forwordXYZ=[{forwordXYZ}] isMove={isMove} child0={(c != null ? $"localEuler={c.localEulerAngles.ToString("F1")} localScale={c.localScale.ToString("F3")}" : "无")} " +
|
|
|
|
|
$"本体scale={transform.localScale.ToString("F3")}");
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-18 19:33:39 +08:00
|
|
|
public void TimeDieFish()
|
|
|
|
|
{
|
|
|
|
|
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public override void DieFish(RoomKillNotice obj = null)
|
|
|
|
|
{
|
|
|
|
|
base.DieFish(obj);
|
|
|
|
|
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
|
|
|
|
|
action_effect_DieAward = (o) =>
|
|
|
|
|
{
|
|
|
|
|
if (obj == null) return;
|
|
|
|
|
|
|
|
|
|
foreach (var item in CreateFishManager.Instance.currGameType.list_Sits)
|
|
|
|
|
{
|
|
|
|
|
if (item.user == obj.userId)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var v = o.GetComponent<BJEventBase>();
|
|
|
|
|
v.Init(
|
|
|
|
|
obj.gold, // goldCount
|
|
|
|
|
item.posID, // posID
|
|
|
|
|
obj.skillsGold, // paobei
|
|
|
|
|
obj.fishScore, // fishScore
|
|
|
|
|
obj.beishu, // beishu
|
2026-08-15 14:47:42 +08:00
|
|
|
JiaFen, // action<int>
|
|
|
|
|
() => { v.obj = obj.param; }
|
|
|
|
|
|
2026-06-18 19:33:39 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
public override void OnDisable()
|
|
|
|
|
{
|
2026-09-11 14:25:06 +08:00
|
|
|
// ⭐ 回收状态:child0 离场时姿态(是否中途被翻转过可由游动期突变日志判断)
|
|
|
|
|
var c = DbgChild;
|
|
|
|
|
Debug.Log($"[Boss翻转排查] OnDisable guid={guid} child0={(c != null ? $"localEuler={c.localEulerAngles.ToString("F1")} localScale={c.localScale.ToString("F3")}" : "无")} " +
|
|
|
|
|
$"路线={lastMoveLineId}");
|
2026-06-18 19:33:39 +08:00
|
|
|
|
|
|
|
|
//GetComponent<Animator>().enabled = false;
|
2026-07-13 04:48:18 +08:00
|
|
|
if (currEffect_DieAward != null)
|
|
|
|
|
currEffect_DieAward.SetActive(true);
|
2026-06-18 19:33:39 +08:00
|
|
|
}
|
|
|
|
|
public override void OnMoveUpdata()
|
|
|
|
|
{
|
|
|
|
|
base.OnMoveUpdata();
|
2026-09-11 14:25:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
// ⭐ 每帧检测 child0 突变(旋转的是child0不是本体):
|
|
|
|
|
// - 单帧世界旋转跳变>90° = 翻转瞬间(候选来源:mirror180镜像切换/_rollSign符号切换/
|
|
|
|
|
// heading跟随/其他外部代码),moveTime 可定位发生时刻
|
|
|
|
|
var ch = DbgChild;
|
|
|
|
|
if (ch != null)
|
|
|
|
|
{
|
|
|
|
|
if (!_dbgHasLast)
|
|
|
|
|
{
|
|
|
|
|
_dbgLastRot = ch.rotation;
|
|
|
|
|
_dbgLastScale = ch.localScale;
|
|
|
|
|
_dbgHasLast = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
float angleDelta = Quaternion.Angle(_dbgLastRot, ch.rotation);
|
|
|
|
|
if (angleDelta > 90f)
|
|
|
|
|
{
|
|
|
|
|
Debug.Log($"[Boss翻转排查] ⚠️child0旋转单帧突变{angleDelta:F0}°! guid={guid} " +
|
|
|
|
|
$"worldEuler {_dbgLastRot.eulerAngles.ToString("F1")}→{ch.rotation.eulerAngles.ToString("F1")} " +
|
|
|
|
|
$"moveTime={moveTime:F2}s 路线={lastMoveLineId}");
|
|
|
|
|
}
|
|
|
|
|
if ((ch.localScale.x >= 0f) != (_dbgLastScale.x >= 0f) ||
|
|
|
|
|
(ch.localScale.y >= 0f) != (_dbgLastScale.y >= 0f) ||
|
|
|
|
|
(ch.localScale.z >= 0f) != (_dbgLastScale.z >= 0f))
|
|
|
|
|
{
|
|
|
|
|
Debug.Log($"[Boss翻转排查] ⚠️child0缩放符号翻转! guid={guid} {_dbgLastScale.ToString("F3")}→{ch.localScale.ToString("F3")} " +
|
|
|
|
|
$"moveTime={moveTime:F2}s 路线={lastMoveLineId}");
|
|
|
|
|
}
|
|
|
|
|
_dbgLastRot = ch.rotation;
|
|
|
|
|
_dbgLastScale = ch.localScale;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-18 19:33:39 +08:00
|
|
|
if (moveTime >= monsterData.moveLine.moveTime)
|
|
|
|
|
{
|
|
|
|
|
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|