public void Defend(BaseUnit unit, bool isCustomMoveLegion = true)
        {
            if (unit == null)
            {
                return;
            }
            var castle = unit as TCastle;

            if (castle == null)
            {
                CLog.Error("Defend:castle == null)");
                return;
            }
            if (IsInDefend())
            {
                return;
            }
            if (!SelfUnit.IsSelf(castle))
            {
                return;
            }
            if (castle.CastleStationedMgr.IsHaveDefender())
            {
                return;
            }
            PreDefendCastle = DefendCastle;
            DefendCastle    = castle;
            castle.CastleStationedMgr.OnBeDefend(SelfUnit);
            OnDefend(castle, isCustomMoveLegion);
            Callback_OnDefendChanged?.Invoke(PreDefendCastle, DefendCastle);
        }
        public void MoveoutLegion()
        {
            var inBlockerUnits = AStarMgr.GetBlockerUnits(SelfUnit, false);

            foreach (var item in inBlockerUnits)
            {
                if (SelfUnit.IsSelf(item))
                {
                    continue;
                }
                if (item is TLegion legion)
                {
                    legion.LegionStationedMgr.LeaveBlocker(SelfUnit);
                }
            }
            if (IsHaveDefender())
            {
                Defender.LegionStationedMgr.LeaveDefend(true);
            }
            if (IsInSiege())
            {
                Attackers.ForSafe(x =>
                {
                    x.LegionStationedMgr.LeaveSiege(true);
                });
            }
        }