using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; using UnityEngine.UI; public class UI_PPTForPracticePanel : BasePanel { public GameObject pptImagePrefab; public RectTransform content; public ScrollRect scrollRect; //public ScrollRect leftscrollRect; public UI_TipsForPracticePanelPPTNameItem pptNameItem; public RectTransform Left_content; public CanvasGroup canvasGroup; public string pptFolderName; public UI_SelectDevicePanel UI_SelectDevice; protected override void Awake() { canvasGroup.alpha = 1f; pptFolderName = Application.streamingAssetsPath + "/PPT"; PPTManager.Instance.PPTFiles(pptFolderName); string[] ppts = PPTManager.Instance.PPTName(); // 1. 提取文件名并解析数字前缀 var sortedItems = ppts .Select(path => new { Path = path, Name = PPTManager.Instance.PathName(path), Order = PPTManager.Instance.ExtractLeadingNumber(PPTManager.Instance.PathName(path)) // 提取数字 }) .OrderBy(item => item.Order) // 按数字排序 .ToList(); // 2. 生成排序后的按钮 foreach (var item in sortedItems) { var buttonItem = Instantiate(pptNameItem, Left_content); buttonItem.Init(item.Name); buttonItem.PPTName_Tog.gameObject.name = item.Name; Debug.Log($"已创建按钮: {item.Name} (排序键: {item.Order})"); } base.Awake(); //pptConfig = JsonManager.LoadData("pptConfig"); if (ppts == null || ppts.Length == 0) { Debug.LogError("PPT路径数组未初始化或为空"); return; } } void Start() { // 监听单页加载完成事件 PPTManager.Instance.OnSinglePageLoaded += texture => { // 立即显示当前加载的页面 DisplaySinglePage(texture); }; } public override void ShowMe() { base.ShowMe(); string pptBtnName = Left_content.GetChild(0).GetComponent().PPTName_Tog.gameObject.name; OnClick(pptBtnName); //await ToolManager.CanvasFadeIn(canvasGroup, 0.5f); } public override void HideMe() { base.HideMe(); //await ToolManager.CanvasFadeOut(canvasGroup, 0.5f); } protected override void OnClick(string btnName) { Debug.Log(btnName); switch (btnName) { case "retrun_Btn": if (GameManager.RunModelMgr.SceneType != E_SceneType.Site) { GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (panel) => { GameManager.UIMgr.ShowPanel(E_UI_Layer.Bot, (panel) => { Debug.Log("退出UI_PPTForPracticePanel"); GameManager.UIMgr.HidePanel(); //GameManager.UIMgr.HidePanel(); }); }); } else { GameManager.UIMgr.HidePanel(); if (GameManager.UIMgr.GetPanel() != null) { GameManager.UIMgr.HidePanel(); } } //Bootstrap.Instance.uiManager.HidePanel(); break; case "EnterPracticalTrainingBtn": //UI_SelectDevice.Init(); GameManager.RunModelMgr.schemeID = 2002; GameManager.ProcessMgr.Init(GameManager.RunModelMgr.schemeID); GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (panel) => { panel.Init(); GameManager.EventMgr.EventTrigger(Enum_EventType.UpdateProgress, 0.1f); GameManager.ScenesMgr.LoadSceneAsyn($"{GameManager.Instance.systemId}_2002_{GameManager.Instance.startSceneName}", () => { GameManager.UIMgr.HidePanel(); GameManager.UIMgr.HidePanel(); GameManager.UIMgr.HidePanel(); GameManager.EventMgr.EventTrigger(Enum_EventType.UpdateProgress, 0.9f); }); }); Debug.Log("进入实训"); break; } //await ToolManager.RefreshScrollView(content, scrollRect); } protected override void OnChangeToggle(string togglePath, bool isOn) { base.OnChangeToggle(togglePath, isOn); switch (togglePath) { default: if (isOn) { foreach (Transform child in content)//清理之前的图片 { DestroyImmediate(child.gameObject); } // 启动协程异步加载PPT StartCoroutine(LoadPPTAsync(togglePath, textures => { if (textures != null) { DisplayPPT(textures); } })); } break; } } // 添加异步加载方法 private IEnumerator LoadPPTAsync(string pptName, Action> callback) { // 调用PPTManager的异步加载方法 yield return PPTManager.Instance.LoadPPTAsync(pptName, callback); } private void DisplayPPT(List textures) { foreach (Transform child in content) { Destroy(child.gameObject); } Debug.LogError("texturesCount:" + textures.Count); foreach (var texture in textures) { RawImage rawImage = pptImagePrefab.GetComponent(); RawImage image = Instantiate(rawImage, content); image.texture = texture; image.rectTransform.sizeDelta = new Vector2(1608, 940); } } private void DisplaySinglePage(Texture2D texture) { RawImage rawImage = pptImagePrefab.GetComponent(); RawImage image = Instantiate(rawImage, content); image.texture = texture; image.rectTransform.sizeDelta = new Vector2(1608, 940); //foreach (Transform child in content) //{ // DestroyImmediate(child.gameObject); //} } }