yyl
2026-01-29 83ff2cfc367d3227449fa8414a25541374929ecb
Main/System/Battle/BattleObject/HeroBattleObject.cs
@@ -15,6 +15,11 @@
    public GameObject heroGo => _heroGo;
    public MotionBase motionBase;
    public TeamHero teamHero { get; private set; }
    // Buff 管理器(只有 Hero 有 buff 系统)
    public BattleObjectBuffMgr buffMgr;
    private RectTransform m_heroRectTrans;
@@ -53,13 +58,15 @@
    public void Init(GameObject _heroGo, TeamHero _teamHero, BattleCamp _camp)
    {
        this._heroGo = _heroGo;
        Init(_teamHero, _camp);
    }
    public override void Init(TeamHero _teamHero, BattleCamp _camp)
    {
        teamHero = _teamHero;
        Camp = _camp;
        ObjID = _teamHero.ObjID;
        InitInternal();
    }
    private void InitInternal()
    {
        motionBase = new MotionBase();
        motionBase.Init(_heroGo.GetComponentInChildren<SkeletonAnimation>(true));
        buffMgr = new BattleObjectBuffMgr();
@@ -89,6 +96,41 @@
            heroInfoBar.SetActive(true);
        }
        SetFront();
        if (battleField.ToString() != BattleConst.StoryBattleField &&
            battleField.ToString() != BattleConst.TianziBillboradBattleField)
        {
            var hitArea = heroGo.GetComponent<Image>();
            if (hitArea == null)
            {
                hitArea = heroGo.AddComponent<Image>();
                hitArea.color = new Color(0, 0, 0, 0); //让射线检测到
            }
            var btn = heroGo.GetComponent<ButtonEx>();
            if (btn == null)
            {
                btn = heroGo.AddComponent<ButtonEx>();
                btn.interval = 0.5f;// 防止频繁连续点击
            }
            btn.AddListener(() =>
            {
                // 判断点击的是我方阵营还是敌方阵营,目前左边都是我方阵营
                bool isMySide = Camp == BattleCamp.Red;
                EventBroadcast.Instance.Broadcast(EventName.BATTLE_CLICK_HERO, new BattleClickHeroData()
                {
                    battleName = battleField.ToString(),
                    isMySide = isMySide,
                    mapID = battleField.MapID,
                    funcLineID = battleField.FuncLineID,
                    npcID = teamHero.NPCID,
                    posNum = teamHero.positionNum,
                    heroID = teamHero.heroId,
                    teams = battleField?.battleObjMgr.GetBattleObjList(isMySide ? BattleCamp.Red : BattleCamp.Blue),
                });
            });
        }
    }
    public override void Run()
@@ -481,6 +523,36 @@
        motionBase.ResetForReborn(false);
        isReborning = false;
    }
    // ============ 实现抽象访问方法 ============
    public override BattleObjectBuffMgr GetBuffMgr() => buffMgr;
    public override int GetPositionNum() => teamHero.positionNum;
    public override float GetModelScale() => teamHero.modelScale;
    public override string GetName() => teamHero.name;
    protected override bool GetIsStunned() => teamHero.isStunned;
    protected override bool GetIsFrozen() => teamHero.isFrozen;
    protected override bool GetIsStoned() => teamHero.isStoned;
    protected override bool GetIsSlient() => teamHero.isSlient;
    protected override bool GetIsDisarmed() => teamHero.isDisarmed;
    protected override bool GetIsInvincible() => teamHero.isInvinceble;
    protected override bool GetIsDead() => teamHero.isDead;
    public override int GetRage() => teamHero.rage;
    protected override void ApplyCasterHpChange(long newHp)
    {
        teamHero.curHp = newHp;
    }
    public override long GetCurHp() => teamHero.curHp;
    public override long GetMaxHp() => teamHero.maxHp;
    public override void SetCurHp(long value) { teamHero.curHp = value; }
    public override void SetIsDead(bool value) { teamHero.isDead = value; }
    public override int GetNPCID() => teamHero.NPCID;
    public override long GetFightPower() => teamHero.fightPower;
    // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给
    protected override BattleDmgInfo PopDamage(BattleHurtParam battleHurtParam)