yyl
2026-03-04 bc1cb6da854cb2e9144f10ed55330a537ecdca16
Main/System/Battle/BattleField/BattleField.cs
@@ -88,13 +88,6 @@
    {
        guid = _guid;
        #pragma warning disable CS0618 // Obsolete — sync legacy constructor, use CreateAsync for new code
        GameObject go = ResManager.Instance.LoadAsset<GameObject>("Battle/Prefabs", "BattleRootNode");
        #pragma warning restore CS0618
        GameObject battleRootNodeGO = GameObject.Instantiate(go);
        battleRootNode = battleRootNodeGO.GetComponent<BattleRootNode>();
        battleRootNodeGO.name = this.GetType().Name;
        battleObjMgr = new BattleObjMgr();
        battleEffectMgr = new BattleEffectMgr();
        battleTweenMgr = new BattleTweenMgr();
@@ -107,30 +100,13 @@
    /// <summary>
    /// US2: Static async factory method. Creates BattleField with async resource loading.
    /// </summary>
    public static async UniTask<BattleField> CreateAsync(string _guid)
    public async UniTask LoadRoot()
    {
        var field = new BattleField(_guid, skipResourceLoad: true);
        GameObject go = await ResManager.Instance.LoadAssetAsync<GameObject>("Battle/Prefabs", "BattleRootNode");
        GameObject battleRootNodeGO = GameObject.Instantiate(go);
        field.battleRootNode = battleRootNodeGO.GetComponent<BattleRootNode>();
        battleRootNodeGO.name = field.GetType().Name;
        return field;
        battleRootNode = battleRootNodeGO.GetComponent<BattleRootNode>();
        battleRootNodeGO.name = GetType().Name;
    }
    /// <summary>
    /// US2: Protected constructor without resource loading (for async factory).
    /// </summary>
    protected BattleField(string _guid, bool skipResourceLoad)
    {
        guid = _guid;
        battleObjMgr = new BattleObjMgr();
        battleEffectMgr = new BattleEffectMgr();
        battleTweenMgr = new BattleTweenMgr();
        recordPlayer = new RecordPlayer();
        soundManager = new BattleSoundManager(this);
        processingDeathObjIds = new HashSet<uint>();
    }
    public void AddCastingSkill(long objID, SkillBase skill)
    {
        List<SkillBase> skillBases = null;
@@ -167,7 +143,7 @@
        return castingSkillDict.ContainsKey(objID);
    }
    public virtual void Init(int _MapID, int _FuncLineID, JsonData _extendData,
    public async virtual UniTask Init(int _MapID, int _FuncLineID, JsonData _extendData,
        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
    {
        SetData(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, _turnMax);
@@ -177,15 +153,15 @@
        if (blueTeamList == null)
        {
            battleObjMgr.Init(this, redTeamList[redTeamIndex], null);
            await battleObjMgr.Init(this, redTeamList[redTeamIndex], null);
            HaveRest();
        }
        else
        {
            battleObjMgr.Init(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
            await battleObjMgr.Init(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
        }
        LoadMap(MapID);
        await LoadMap(MapID);
        SetBattleStartState();
        SetRootNodePosition();
@@ -235,7 +211,7 @@
    }
    public virtual void Reload(int _MapID, int _FuncLineID, JsonData _extendData,
    public async virtual UniTask Reload(int _MapID, int _FuncLineID, JsonData _extendData,
        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
    {
        SetData(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, _turnMax);
@@ -245,15 +221,15 @@
        
        if (blueTeamList == null)
        {
            battleObjMgr.Reload(this, redTeamList[redTeamIndex], null);
            await battleObjMgr.Reload(this, redTeamList[redTeamIndex], null);
            HaveRest();
        }
        else
        {
            battleObjMgr.Reload(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
            await battleObjMgr.Reload(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
        }
        LoadMap(MapID);
        await LoadMap(MapID);
        SetBattleStartState();
@@ -327,22 +303,7 @@
        }
    }
    protected virtual void LoadMap(int mapID)
    {
        BattleMapConfig battleMapConfig = BattleMapConfig.Get(mapID);
        if (battleMapConfig != null)
        {
        #pragma warning disable CS0618 // Obsolete — sync legacy fallback, use LoadMapAsync
            Texture texture = ResManager.Instance.LoadAsset<Texture>("Texture/FullScreenBg", battleMapConfig.MapBg);
        #pragma warning restore CS0618
            battleRootNode.SetBackground(texture);
        }
    }
    /// <summary>
    /// US2: Async map loading.
    /// </summary>
    protected virtual async UniTask LoadMapAsync(int mapID)
    protected virtual async UniTask LoadMap(int mapID)
    {
        BattleMapConfig battleMapConfig = BattleMapConfig.Get(mapID);
        if (battleMapConfig != null)
@@ -352,6 +313,7 @@
        }
    }
    public void SetSpeedRatio(float ratio)
    {
        bool isChange = speedRatio != ratio;