InstantiateOperation.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using UnityEngine;
  2. namespace YooAsset
  3. {
  4. public sealed class InstantiateOperation : AsyncOperationBase
  5. {
  6. private enum ESteps
  7. {
  8. None,
  9. Clone,
  10. Done,
  11. }
  12. private readonly AssetOperationHandle _handle;
  13. private readonly Vector3 _position;
  14. private readonly Quaternion _rotation;
  15. private readonly Transform _parent;
  16. private readonly bool _setPositionRotation;
  17. private ESteps _steps = ESteps.None;
  18. /// <summary>
  19. /// 实例化的游戏对象
  20. /// </summary>
  21. public GameObject Result = null;
  22. internal InstantiateOperation(AssetOperationHandle handle, Vector3 position, Quaternion rotation, Transform parent, bool setPositionRotation)
  23. {
  24. _handle = handle;
  25. _position = position;
  26. _rotation = rotation;
  27. _parent = parent;
  28. _setPositionRotation = setPositionRotation;
  29. }
  30. internal override void Start()
  31. {
  32. _steps = ESteps.Clone;
  33. }
  34. internal override void Update()
  35. {
  36. if (_steps == ESteps.None || _steps == ESteps.Done)
  37. return;
  38. if (_steps == ESteps.Clone)
  39. {
  40. if (_handle.IsValid == false)
  41. {
  42. _steps = ESteps.Done;
  43. Status = EOperationStatus.Failed;
  44. Error = $"{nameof(AssetOperationHandle)} is invalid.";
  45. return;
  46. }
  47. if (_handle.IsDone == false)
  48. return;
  49. if (_handle.AssetObject == null)
  50. {
  51. _steps = ESteps.Done;
  52. Status = EOperationStatus.Failed;
  53. Error = $"{nameof(AssetOperationHandle.AssetObject)} is null.";
  54. return;
  55. }
  56. if(_setPositionRotation)
  57. {
  58. if (_parent == null)
  59. Result = Object.Instantiate(_handle.AssetObject as GameObject, _position, _rotation);
  60. else
  61. Result = Object.Instantiate(_handle.AssetObject as GameObject, _position, _rotation, _parent);
  62. }
  63. else
  64. {
  65. if (_parent == null)
  66. Result = Object.Instantiate(_handle.AssetObject as GameObject);
  67. else
  68. Result = Object.Instantiate(_handle.AssetObject as GameObject, _parent);
  69. }
  70. _steps = ESteps.Done;
  71. Status = EOperationStatus.Succeed;
  72. }
  73. }
  74. }
  75. }