ObjectCacheDic.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace Kasizuki
  5. {
  6. public class ObjectCacheDic
  7. {
  8. public ObjectCacheDic()
  9. {
  10. this.m_CachedObjectDic = new Dictionary<string, UnityEngine.Object>();
  11. }
  12. public T AddCache<T>(string name, T Obj) where T : UnityEngine.Object
  13. {
  14. if (this.m_CachedObjectDic == null)
  15. {
  16. NDebug.Warning("キャッシュ用配列が未初期化でした。初期化を行います。");
  17. this.m_CachedObjectDic = new Dictionary<string, UnityEngine.Object>();
  18. }
  19. if (Obj == null)
  20. {
  21. NDebug.Assert("キャッシュするオブジェクトにnullが指定されました。\n処理を行いません。", false);
  22. }
  23. if (string.IsNullOrEmpty(name))
  24. {
  25. NDebug.Assert("キャッシュするオブジェクトの名前に空文字が指定されました\n処理を行いません。", false);
  26. }
  27. if (this.m_CachedObjectDic.ContainsKey(name))
  28. {
  29. NDebug.Assert(string.Format("「{0}」という登録名は既に利用されています。\n処理を行いません。", name), false);
  30. }
  31. if (this.m_CachedObjectDic.ContainsValue(Obj))
  32. {
  33. NDebug.Assert(string.Format("オブジェクト「{0}」は既に別名で登録されています。\n今回の登録名:「{1}」\n処理を行いません。", Obj.name, name), false);
  34. }
  35. this.m_CachedObjectDic.Add(name, Obj);
  36. return Obj;
  37. }
  38. public T GetCache<T>(string name) where T : UnityEngine.Object
  39. {
  40. if (this.m_CachedObjectDic == null)
  41. {
  42. NDebug.Assert("オブジェクトのキャッシュ用配列が未初期化です。\n処理を行いません。", false);
  43. }
  44. if (string.IsNullOrEmpty(name))
  45. {
  46. NDebug.Assert("オブジェクトの登録名に空文字が指定されました。\n処理を行いません。", false);
  47. }
  48. if (!this.m_CachedObjectDic.ContainsKey(name))
  49. {
  50. NDebug.Assert(string.Format("登録名「{0}」は使用されていません。\n処理を行いません。", name), false);
  51. }
  52. UnityEngine.Object @object = this.m_CachedObjectDic[name];
  53. if (@object == null)
  54. {
  55. NDebug.Warning(string.Format("登録名「{0}」のデータはnullになっています。\n登録されているオブジェクトは別の処理で削除された可能性があります。\n対応するキーを配列から外します。", name));
  56. this.RemoveCache(name);
  57. return (T)((object)null);
  58. }
  59. T result = (T)((object)null);
  60. try
  61. {
  62. result = (T)((object)@object);
  63. }
  64. catch (InvalidCastException ex)
  65. {
  66. NDebug.Assert(string.Format("登録名「{0}」のオブジェクト「{1}」は、「{2}」型にキャストできません。\n\n{3}", new object[]
  67. {
  68. name,
  69. @object.name,
  70. typeof(T),
  71. ex.ToString()
  72. }), false);
  73. }
  74. return result;
  75. }
  76. public void RemoveCache(string name)
  77. {
  78. if (this.m_CachedObjectDic == null)
  79. {
  80. NDebug.Assert("オブジェクトのキャッシュ用配列が未初期化です。\n処理を行いません。", false);
  81. }
  82. if (string.IsNullOrEmpty(name))
  83. {
  84. NDebug.Assert("オブジェクトの登録名に空文字が指定されました。\n処理を行いません。", false);
  85. }
  86. if (!this.m_CachedObjectDic.ContainsKey(name))
  87. {
  88. NDebug.Warning(string.Format("登録名「{0}」は使用されていません。\n処理を行いません。", name));
  89. return;
  90. }
  91. this.m_CachedObjectDic.Remove(name);
  92. }
  93. public T GetChildObject<T>(GameObject target, string name) where T : UnityEngine.Object
  94. {
  95. GameObject childObject = UTY.GetChildObject(target, name, false);
  96. return childObject.GetComponent<T>();
  97. }
  98. public T CacheChildObject<T>(GameObject target, string path, string name) where T : UnityEngine.Object
  99. {
  100. return this.AddCache<T>(name, this.GetChildObject<T>(target, path));
  101. }
  102. public List<string> Keys
  103. {
  104. get
  105. {
  106. return new List<string>(this.m_CachedObjectDic.Keys);
  107. }
  108. }
  109. public List<UnityEngine.Object> Values
  110. {
  111. get
  112. {
  113. return new List<UnityEngine.Object>(this.m_CachedObjectDic.Values);
  114. }
  115. }
  116. public Dictionary<string, UnityEngine.Object> Dic
  117. {
  118. get
  119. {
  120. return this.m_CachedObjectDic;
  121. }
  122. }
  123. private Dictionary<string, UnityEngine.Object> m_CachedObjectDic;
  124. }
  125. }