Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / activity / ActivityObject_Create.cs
@小李xl 小李xl on 30 Mar 2024 1 KB 商店开发中
  1.  
  2. using System;
  3. using Config;
  4.  
  5. public partial class ActivityObject
  6. {
  7. /// <summary>
  8. /// 通过 ActivityBase 实例化 ActivityObject 对象
  9. /// </summary>
  10. public static ActivityObject Create(ExcelConfig.ActivityBase config)
  11. {
  12. var world = World.Current;
  13. if (world == null)
  14. {
  15. throw new Exception("实例化 ActivityObject 前请先调用 'GameApplication.Instance.DungeonManager.CreateNewWorld()' 初始化 World 对象");
  16. }
  17.  
  18. try
  19. {
  20. var instance = ResourceManager.LoadAndInstantiate<ActivityObject>(config.Prefab);
  21. instance._InitNode(config, world);
  22. return instance;
  23. }
  24. catch (Exception e)
  25. {
  26. Debug.LogError($"创建实例'{config.Id}'失败, 错误信息: {e.Message}\n{e.StackTrace}");
  27. throw;
  28. }
  29. }
  30.  
  31. /// <summary>
  32. /// 通过 ActivityBase 实例化 ActivityObject 对象
  33. /// </summary>
  34. public static T Create<T>(ExcelConfig.ActivityBase config) where T : ActivityObject
  35. {
  36. return (T)Create(config);
  37. }
  38. /// <summary>
  39. /// 通过 ItemId 实例化 ActivityObject 对象
  40. /// </summary>
  41. public static ActivityObject Create(string itemId)
  42. {
  43. if (ExcelConfig.ActivityBase_Map.TryGetValue(itemId, out var config))
  44. {
  45. return Create(config);
  46. }
  47. Debug.LogError("创建实例失败, 未找到id为'" + itemId + "'的物体!");
  48. return null;
  49. }
  50.  
  51. /// <summary>
  52. /// 通过 ItemId 实例化 ActivityObject 对象
  53. /// </summary>
  54. public static T Create<T>(string itemId) where T : ActivityObject
  55. {
  56. var instance = Create(itemId);
  57. if (instance != null)
  58. {
  59. return (T)instance;
  60. }
  61. return null;
  62. }
  63. }