diff --git a/.gitignore b/.gitignore index ba79769..6007d03 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/UserSettings/EditorUserSettings.asset /UniTask.Addressables.csproj /UniTask.csproj /UniTask.DOTween.csproj diff --git a/Assets/Resources/Prefabs/高粱预制体.prefab b/Assets/Resources/Prefabs/高粱预制体.prefab index c30b25e..f1958b2 100644 --- a/Assets/Resources/Prefabs/高粱预制体.prefab +++ b/Assets/Resources/Prefabs/高粱预制体.prefab @@ -242,13 +242,17 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 51c3521496de1854697d5682cc43afe5, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 51c3521496de1854697d5682cc43afe5, type: 3} propertyPath: m_Name value: "\u9AD8\u7CB1" objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 51c3521496de1854697d5682cc43afe5, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 51c3521496de1854697d5682cc43afe5, type: 3} @@ -313,13 +317,17 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 0fc9aae39f3b8fd45959b9f2e382a854, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 0fc9aae39f3b8fd45959b9f2e382a854, type: 3} propertyPath: m_Name value: "\u9AD8\u7CB1" objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 0fc9aae39f3b8fd45959b9f2e382a854, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0fc9aae39f3b8fd45959b9f2e382a854, type: 3} diff --git a/Assets/Resources/UI/UI_Panel/UI_PPTForPracticePanel.prefab b/Assets/Resources/UI/UI_Panel/UI_PPTForPracticePanel.prefab index c47bc28..e786061 100644 --- a/Assets/Resources/UI/UI_Panel/UI_PPTForPracticePanel.prefab +++ b/Assets/Resources/UI/UI_Panel/UI_PPTForPracticePanel.prefab @@ -685,6 +685,7 @@ GameObject: m_Component: - component: {fileID: 496968027908146854} - component: {fileID: 4042481884953316685} + - component: {fileID: 4815313765920862536} m_Layer: 5 m_Name: UI_PPTForPracticePanel m_TagString: Untagged @@ -733,6 +734,18 @@ MonoBehaviour: canvasGroup: {fileID: 2747193240799827809} pptFolderName: UI_SelectDevice: {fileID: 1751634905210954150, guid: 7a344e5bc4e2a7a46bcb6cd179226da8, type: 3} +--- !u!114 &4815313765920862536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6017930034823240235} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cc7c87b8ab572f34fb8f1f3a831ce782, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &6034407815697293954 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/HQB/LoadPPTTest.cs b/Assets/Scripts/HQB/PPTManager.cs similarity index 74% rename from Assets/Scripts/HQB/LoadPPTTest.cs rename to Assets/Scripts/HQB/PPTManager.cs index e2710c5..ca22f8e 100644 --- a/Assets/Scripts/HQB/LoadPPTTest.cs +++ b/Assets/Scripts/HQB/PPTManager.cs @@ -12,39 +12,47 @@ using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI; -public static class LoadPPTTest +/// +/// PPT管理类 +/// +public class PPTManager : MonoBehaviour { + public static PPTManager Instance; + /// /// /// - private static Dictionary> texturesDic = new Dictionary>(); + private Dictionary> texturesDic = new Dictionary>(); /// /// PPT所有路径 /// - private static string[] pptsPath = null; + private string[] pptsPath = null; /// /// 加载单个课程所有图片 /// /// /// - public static List LoadPPTItems(string pptName) + public List LoadPPTItems(string pptName) { string pptPath = GetPPTPathByName(pptName); return GetTexture2DsByName(pptName, pptPath); //target.StartCoroutine(LoadAllPPTFiles(pptPath)); } + protected PPTManager() + { + Instance = this; + } - - public static string[] PPTName() + public string[] PPTName() { ///切割pptsPath return pptsPath; } - private static List GetTexture2DsByName(string pptName, string pptPath) + private List GetTexture2DsByName(string pptName, string pptPath) { if (!texturesDic.ContainsKey(pptName)) { @@ -66,7 +74,7 @@ public static class LoadPPTTest /// /// 名称 /// - private static string GetPPTPathByName(string pptName) + private string GetPPTPathByName(string pptName) { foreach (var item in pptsPath) { @@ -80,7 +88,7 @@ public static class LoadPPTTest /// 获取文件夹下所有.pptx文件 /// /// - public static void PPTFiles(string folderPath) + public void PPTFiles(string folderPath) { string fullPPTFolderPath = Path.Combine(Application.streamingAssetsPath, folderPath); pptsPath = Directory.GetFiles(fullPPTFolderPath, "*.pptx"); @@ -113,7 +121,7 @@ public static class LoadPPTTest // Debug.Log("所有PPT加载完成!"); //} - public static List LoadAllPPTFiles(string folderPath) + public List LoadAllPPTFiles(string folderPath) { List texture2Ds = new List(); Presentation presentation = new Presentation(folderPath); @@ -145,11 +153,68 @@ public static class LoadPPTTest } // 逐个加载每个PPT文件 + // + // 添加异步加载接口 + public IEnumerator LoadPPTAsync(string pptName, Action> callback) + { + string pptPath = GetPPTPathByName(pptName); + + if (!texturesDic.ContainsKey(pptName)) + { + // 异步加载所有PPT页面 + yield return StartCoroutine(LoadAllPPTFilesAsync(pptPath, textures => { + texturesDic.Add(pptName, textures); + callback?.Invoke(textures); + })); + } + else + { + callback?.Invoke(texturesDic[pptName]); + } + } + + // 实现逐页异步加载 + public IEnumerator LoadAllPPTFilesAsync(string folderPath, Action> callback) + { + List texture2Ds = new List(); + Presentation presentation = new Presentation(folderPath); + + for (int i = 0; i < presentation.Slides.Count; i++) + { + ISlide slide = presentation.Slides[i]; + var bitmap = slide.GetThumbnail(1f, 1f); + + using (MemoryStream ms = new MemoryStream()) + { + bitmap.Save(ms, ImageFormat.Jpeg); + byte[] buff = ms.ToArray(); + + Texture2D texture2D = new Texture2D(bitmap.Width, bitmap.Height); + texture2D.LoadImage(buff); + texture2Ds.Add(texture2D); + + // 每加载完一页就触发单页回调 + OnSinglePageLoaded?.Invoke(texture2D); + + // 每加载完一页就yield一次,避免长时间阻塞 + yield return null; + } + + // 释放bitmap资源 + bitmap.Dispose(); + } + + callback?.Invoke(texture2Ds); + } + + // 添加单页加载事件 + public event Action OnSinglePageLoaded; + /// /// 分割ppt路径名称 /// /// - public static string PathName(string pptname) + public string PathName(string pptname) { if (string.IsNullOrEmpty(pptname)) { @@ -166,7 +231,7 @@ public static class LoadPPTTest /// /// 从文件名中提取开头的数字(如 "1-第一章" -> 返回 1) /// - public static int ExtractLeadingNumber(string fileName) + public int ExtractLeadingNumber(string fileName) { if (string.IsNullOrEmpty(fileName)) return 0; // 找到第一个数字序列 diff --git a/Assets/Scripts/HQB/LoadPPTTest.cs.meta b/Assets/Scripts/HQB/PPTManager.cs.meta similarity index 100% rename from Assets/Scripts/HQB/LoadPPTTest.cs.meta rename to Assets/Scripts/HQB/PPTManager.cs.meta diff --git a/Assets/Scripts/Project/Manager/GameManager.cs b/Assets/Scripts/Project/Manager/GameManager.cs index ed74d0c..f475689 100644 --- a/Assets/Scripts/Project/Manager/GameManager.cs +++ b/Assets/Scripts/Project/Manager/GameManager.cs @@ -132,6 +132,10 @@ public class GameManager : SingletonAutoMono /// public static MissionMgr MissionMgr { get; private set; } + /// + /// PPT管理类 + /// + public static PPTManager PPTManager { get; private set; } #endregion /// @@ -161,6 +165,7 @@ public class GameManager : SingletonAutoMono WorkorderMgr = WorkorderMgr.Instance; //工单管理初始化 FaultManager = FaultManager.Instance; MissionMgr = MissionMgr.Instance; + PPTManager = PPTManager.Instance; DataMgr.Init(); WorkorderMgr.Init(); NetMgr.Init(SendGet); diff --git a/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs b/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs index 19fb19c..3733b94 100644 --- a/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs +++ b/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs @@ -29,16 +29,16 @@ public class UI_PPTForPracticePanel : BasePanel canvasGroup.alpha = 1f; pptFolderName = Application.streamingAssetsPath + "/PPT"; - LoadPPTTest.PPTFiles(pptFolderName); + PPTManager.Instance.PPTFiles(pptFolderName); - string[] ppts = LoadPPTTest.PPTName(); + string[] ppts = PPTManager.Instance.PPTName(); // 1. ȡļǰ׺ var sortedItems = ppts .Select(path => new { Path = path, - Name = LoadPPTTest.PathName(path), - Order = LoadPPTTest.ExtractLeadingNumber(LoadPPTTest.PathName(path)) // ȡ + Name = PPTManager.Instance.PathName(path), + Order = PPTManager.Instance.ExtractLeadingNumber(PPTManager.Instance.PathName(path)) // ȡ }) .OrderBy(item => item.Order) // .ToList(); @@ -57,23 +57,31 @@ public class UI_PPTForPracticePanel : BasePanel Debug.LogError("PPT·δʼΪ"); return; } - - } - public override void ShowMe() + + 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() + public override void HideMe() { base.HideMe(); //await ToolManager.CanvasFadeOut(canvasGroup, 0.5f); } - protected override void OnClick(string btnName) + protected override void OnClick(string btnName) { Debug.Log(btnName); switch (btnName) @@ -120,7 +128,7 @@ public class UI_PPTForPracticePanel : BasePanel }); }); Debug.Log("ʵѵ"); - + break; } @@ -134,15 +142,31 @@ public class UI_PPTForPracticePanel : BasePanel default: if (isOn) { - List textures = LoadPPTTest.LoadPPTItems(togglePath); - if (textures != null) + foreach (Transform child in content)//֮ǰͼƬ { - DisplayPPT(textures); + 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) @@ -159,5 +183,15 @@ public class UI_PPTForPracticePanel : BasePanel } } - + 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); + //} + } } diff --git a/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx b/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx new file mode 100644 index 0000000..f9877ec Binary files /dev/null and b/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx differ diff --git a/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx.meta b/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx.meta new file mode 100644 index 0000000..158047d --- /dev/null +++ b/Assets/StreamingAssets/PPT/1-第一章 绪论.pptx.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 845629668ba4fc24b8fb0ad514c78605 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx b/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx new file mode 100644 index 0000000..ee033d6 Binary files /dev/null and b/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx differ diff --git a/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx.meta b/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx.meta new file mode 100644 index 0000000..0169d69 --- /dev/null +++ b/Assets/StreamingAssets/PPT/2-第二章 酿酒高粱的种类及分类.pptx.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d3b8ee9a7c9227245b07357e35e66ab7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx b/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx new file mode 100644 index 0000000..8011553 Binary files /dev/null and b/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx differ diff --git a/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx.meta b/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx.meta new file mode 100644 index 0000000..20792d3 --- /dev/null +++ b/Assets/StreamingAssets/PPT/3-第三章 酿酒高粱的生长发育.pptx.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2200eae8244115b4ebd869e60a5619d2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: