SceneProvider.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. namespace YooAsset
  7. {
  8. internal sealed class SceneProvider : ProviderOperation
  9. {
  10. private readonly LoadSceneParameters _loadParams;
  11. private bool _suspendLoad;
  12. private FSLoadSceneOperation _loadSceneOp;
  13. public SceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad) : base(manager, providerGUID, assetInfo)
  14. {
  15. _loadParams = loadParams;
  16. _suspendLoad = suspendLoad;
  17. SceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
  18. }
  19. protected override void ProcessBundleResult()
  20. {
  21. if (_loadSceneOp == null)
  22. {
  23. _loadSceneOp = BundleResultObject.LoadSceneOperation(MainAssetInfo, _loadParams, _suspendLoad);
  24. _loadSceneOp.StartOperation();
  25. AddChildOperation(_loadSceneOp);
  26. }
  27. if (IsWaitForAsyncComplete)
  28. _loadSceneOp.WaitForAsyncComplete();
  29. // 注意:场景加载中途可以取消挂起
  30. if (_suspendLoad == false)
  31. _loadSceneOp.UnSuspendLoad();
  32. _loadSceneOp.UpdateOperation();
  33. Progress = _loadSceneOp.Progress;
  34. if (_loadSceneOp.IsDone == false)
  35. return;
  36. if (_loadSceneOp.Status != EOperationStatus.Succeed)
  37. {
  38. InvokeCompletion(_loadSceneOp.Error, EOperationStatus.Failed);
  39. }
  40. else
  41. {
  42. SceneObject = _loadSceneOp.Result;
  43. InvokeCompletion(string.Empty, EOperationStatus.Succeed);
  44. }
  45. }
  46. /// <summary>
  47. /// 解除场景加载挂起操作
  48. /// </summary>
  49. public void UnSuspendLoad()
  50. {
  51. _suspendLoad = false;
  52. }
  53. }
  54. }