Files
5.24BuYu/Assets/MyGame/aa/UI/Game/DefaultBossControl.cs
T
2026-09-11 14:25:06 +08:00

145 lines
5.9 KiB
C#

using Assets.MyGame.Scripts.Net.WebResponses;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DefaultBossControl : MonsterControl_BossBase
{
// ================================================================
// ⭐ 翻转排查日志(临时):ischild0=true 时朝向逻辑旋转的是第0个子物体,
// 本体(transform)不被 ApplyFacingDirection 触碰,日志全部观测 child0
// ================================================================
/// <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;
public override void OnEnable()
{
base.OnEnable();
_dbgHasLast = false;
// ⭐ 出场状态: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}]");
}
}
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")}");
}
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
JiaFen, // action<int>
() => { v.obj = obj.param; }
);
}
}
};
}
public override void OnDisable()
{
// ⭐ 回收状态:child0 离场时姿态(是否中途被翻转过可由游动期突变日志判断)
var c = DbgChild;
Debug.Log($"[Boss翻转排查] OnDisable guid={guid} child0={(c != null ? $"localEuler={c.localEulerAngles.ToString("F1")} localScale={c.localScale.ToString("F3")}" : "无")} " +
$"路线={lastMoveLineId}");
//GetComponent<Animator>().enabled = false;
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
public override void OnMoveUpdata()
{
base.OnMoveUpdata();
// ⭐ 每帧检测 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;
}
}
if (moveTime >= monsterData.moveLine.moveTime)
{
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
}
}
}