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/Scripts/HQB/PPTManager.cs b/Assets/Scripts/HQB/PPTManager.cs
index 0fc57fd..ca22f8e 100644
--- a/Assets/Scripts/HQB/PPTManager.cs
+++ b/Assets/Scripts/HQB/PPTManager.cs
@@ -15,9 +15,11 @@ using UnityEngine.UI;
///
/// PPT管理类
///
-public class PPTManager : BaseManager
+public class PPTManager : MonoBehaviour
{
+ public static PPTManager Instance;
+
///
///
///
@@ -40,7 +42,7 @@ public class PPTManager : BaseManager
protected PPTManager()
{
-
+ Instance = this;
}
public string[] PPTName()
@@ -151,6 +153,63 @@ public class PPTManager : BaseManager
}
// 逐个加载每个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路径名称
///
diff --git a/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs b/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs
index 997e936..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";
- GameManager.PPTManager.PPTFiles(pptFolderName);
+ PPTManager.Instance.PPTFiles(pptFolderName);
- string[] ppts = GameManager.PPTManager.PPTName();
+ string[] ppts = PPTManager.Instance.PPTName();
// 1. ȡļǰ
var sortedItems = ppts
.Select(path => new
{
Path = path,
- Name = GameManager.PPTManager.PathName(path),
- Order = GameManager.PPTManager.ExtractLeadingNumber(GameManager.PPTManager.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 = GameManager.PPTManager.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);
+ //}
+ }
}