using System; using System.Collections.Generic; using Fort23.Core; using GameLogic.CombatScenesTool; using Unity.AI.Navigation; using UnityEngine; namespace GameLogic.Combat.CombatTool { public class CombatSenceController: IDisposable { private AssetHandle scenesHandle; private AssetHandle scenesHandle2; public GameObject scenes1; public GameObject scenes2; private NavMeshSurface _navMeshSurface; private float zoff; private int index = 0; private List _allCombatScenesConfigs = new List(); public CombatScenesConfig _currConfig; private int nextConfigIndex; public async CTask InitScenes() { CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer(); cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask("Chapter01.prefab", delegate(AssetHandle handle) { scenesHandle = handle; scenes1 = scenesHandle.AssetObject(); scenes1.SetActive(true); CombatScenesConfig combatScenesConfig = scenes1.GetComponent(); _allCombatScenesConfigs.Add(combatScenesConfig); })); cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask("Chapter02.prefab", delegate(AssetHandle handle) { scenesHandle2 = handle; scenes2 = scenesHandle2.AssetObject(); scenes2.SetActive(true); CombatScenesConfig combatScenesConfig = scenes2.GetComponent(); _allCombatScenesConfigs.Add(combatScenesConfig); })); cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask( "NavMeshTarget.prefab", delegate(AssetHandle handle) { GameObject go = handle.AssetObject(); _navMeshSurface = go.GetComponent(); })); await cTaskAwaitBuffer.WaitAll(); for (int i = 0; i < _allCombatScenesConfigs.Count; i++) { zoff = -i * 54; // index = i; _allCombatScenesConfigs[i].transform.position = new Vector3(0, 0, zoff); } zoff = 0; index = 0; nextConfigIndex = 0; _currConfig = _allCombatScenesConfigs[0]; Vector3 pos = _allCombatScenesConfigs[0].heroPoint[0].position; // _navMeshSurface.transform.position = pos; UpdateNavMesh(pos); // } public CombatScenesConfig MoveToNextConfig() { nextConfigIndex++; nextConfigIndex %= _allCombatScenesConfigs.Count; return _currConfig=_allCombatScenesConfigs[nextConfigIndex]; } public void NextScenesShow() { index++; index %= _allCombatScenesConfigs.Count; zoff -= 54; _allCombatScenesConfigs[index].transform.position = new Vector3(0, 0, zoff); } public void UpdateNavMesh(Vector3 pos) { if (_navMeshSurface == null) { Debug.LogError("没有导航网格"); return; } _navMeshSurface.transform.position = pos; _navMeshSurface.BuildNavMesh(); } public void Dispose() { if (scenesHandle != null) { scenesHandle.Release(); } if (scenesHandle2 != null) { scenesHandle2.Release(); } if (_navMeshSurface != null) { _navMeshSurface.gameObject.SetActive(false); } } } }