Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

SpriteShapeAnalytics.cs 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Analytics;
  4. using UnityEngine;
  5. using UnityEngine.U2D;
  6. using UnityEngine.Events;
  7. namespace UnityEditor.U2D
  8. {
  9. internal class SpriteShapeAnalyticsEvents
  10. {
  11. public class SpriteShapeEvent : UnityEvent<UnityEngine.U2D.SpriteShape> { }
  12. public class SpriteShapeRendererEvent : UnityEvent<SpriteShapeRenderer> { }
  13. private SpriteShapeEvent m_SpriteShape = new SpriteShapeEvent();
  14. private SpriteShapeRendererEvent m_SpriteShapeRenderer = new SpriteShapeRendererEvent();
  15. public virtual SpriteShapeEvent spriteShapeEvent => m_SpriteShape;
  16. public virtual SpriteShapeRendererEvent spriteShapeRendererEvent => m_SpriteShapeRenderer;
  17. }
  18. [Serializable]
  19. enum SpriteShapeAnalyticsEventType
  20. {
  21. SpriteShapeProfileCreated = 0,
  22. SpriteShapeRendererCreated = 1
  23. }
  24. [Serializable]
  25. struct SpriteShapeAnalyticsEvent
  26. #if USE_NEW_EDITOR_ANALYTICS
  27. : IAnalytic.IData
  28. #endif
  29. {
  30. public const string name = "u2dSpriteShapeToolUsage";
  31. [SerializeField]
  32. public SpriteShapeAnalyticsEventType sub_type;
  33. [SerializeField]
  34. public string data;
  35. }
  36. #if USE_NEW_EDITOR_ANALYTICS
  37. [AnalyticInfo(eventName: SpriteShapeAnalyticsEvent.name,
  38. vendorKey: SpriteShapeUnityAnalyticsStorage.vendorKey,
  39. version: SpriteShapeUnityAnalyticsStorage.version,
  40. maxEventsPerHour: SpriteShapeAnalyticConstant.k_MaxEventsPerHour,
  41. maxNumberOfElements: SpriteShapeAnalyticConstant.k_MaxNumberOfElements)]
  42. internal class SpriteShapeAnalyticsEventAnalytic : IAnalytic
  43. {
  44. SpriteShapeAnalyticsEvent m_EvtData;
  45. public SpriteShapeAnalyticsEventAnalytic(SpriteShapeAnalyticsEvent evtData)
  46. {
  47. m_EvtData = evtData;
  48. }
  49. public bool TryGatherData(out IAnalytic.IData data, out Exception error)
  50. {
  51. data = m_EvtData;
  52. error = null;
  53. return true;
  54. }
  55. }
  56. #endif
  57. internal interface ISpriteShapeAnalyticsStorage
  58. {
  59. AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt);
  60. void Dispose();
  61. }
  62. internal static class SpriteShapeAnalyticConstant
  63. {
  64. public const int k_MaxEventsPerHour = 1000;
  65. public const int k_MaxNumberOfElements = 1000;
  66. }
  67. [Serializable]
  68. internal class SpriteShapeAnalytics
  69. {
  70. const int k_SpriteShapeEventElementCount = 2;
  71. ISpriteShapeAnalyticsStorage m_AnalyticsStorage;
  72. [SerializeField]
  73. SpriteShapeAnalyticsEvents m_EventBus = null;
  74. internal SpriteShapeAnalyticsEvents eventBus
  75. {
  76. get
  77. {
  78. if (m_EventBus == null)
  79. m_EventBus = new SpriteShapeAnalyticsEvents();
  80. return m_EventBus;
  81. }
  82. }
  83. public SpriteShapeAnalytics(ISpriteShapeAnalyticsStorage analyticsStorage)
  84. {
  85. m_AnalyticsStorage = analyticsStorage;
  86. eventBus.spriteShapeEvent.AddListener(OnSpriteShapeCreated);
  87. eventBus.spriteShapeRendererEvent.AddListener(OnSpriteShapeRendererCreated);
  88. }
  89. public void Dispose()
  90. {
  91. eventBus.spriteShapeEvent.RemoveListener(OnSpriteShapeCreated);
  92. eventBus.spriteShapeRendererEvent.RemoveListener(OnSpriteShapeRendererCreated);
  93. m_AnalyticsStorage.Dispose();
  94. }
  95. void OnSpriteShapeCreated(UnityEngine.U2D.SpriteShape shape)
  96. {
  97. SendUsageEvent(new SpriteShapeAnalyticsEvent()
  98. {
  99. sub_type = SpriteShapeAnalyticsEventType.SpriteShapeProfileCreated,
  100. data = ""
  101. });
  102. }
  103. void OnSpriteShapeRendererCreated(SpriteShapeRenderer renderer)
  104. {
  105. SendUsageEvent(new SpriteShapeAnalyticsEvent()
  106. {
  107. sub_type = SpriteShapeAnalyticsEventType.SpriteShapeRendererCreated,
  108. data = ""
  109. });
  110. }
  111. public void SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  112. {
  113. m_AnalyticsStorage.SendUsageEvent(evt);
  114. }
  115. }
  116. // For testing.
  117. internal class SpriteShapeJsonAnalyticsStorage : ISpriteShapeAnalyticsStorage
  118. {
  119. [Serializable]
  120. struct SpriteShapeToolEvents
  121. {
  122. [SerializeField]
  123. public List<SpriteShapeAnalyticsEvent> events;
  124. }
  125. SpriteShapeToolEvents m_TotalEvents = new SpriteShapeToolEvents()
  126. {
  127. events = new List<SpriteShapeAnalyticsEvent>()
  128. };
  129. public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  130. {
  131. m_TotalEvents.events.Add(evt);
  132. return AnalyticsResult.Ok;
  133. }
  134. public void Dispose()
  135. {
  136. try
  137. {
  138. string file = string.Format("analytics_{0}.json", System.DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss"));
  139. if (System.IO.File.Exists(file))
  140. System.IO.File.Delete(file);
  141. System.IO.File.WriteAllText(file, JsonUtility.ToJson(m_TotalEvents, true));
  142. }
  143. catch (Exception ex)
  144. {
  145. Debug.Log(ex);
  146. }
  147. finally
  148. {
  149. m_TotalEvents.events.Clear();
  150. }
  151. }
  152. }
  153. [InitializeOnLoad]
  154. internal class SpriteShapeUnityAnalyticsStorage : ISpriteShapeAnalyticsStorage
  155. {
  156. public const string vendorKey = "unity.2d.spriteshape";
  157. public const int version = 1;
  158. public SpriteShapeUnityAnalyticsStorage()
  159. {
  160. #if !USE_NEW_EDITOR_ANALYTICS
  161. EditorAnalytics.RegisterEventWithLimit(SpriteShapeAnalyticsEvent.name, SpriteShapeAnalyticConstant.k_MaxEventsPerHour, SpriteShapeAnalyticConstant.k_MaxNumberOfElements, vendorKey, version);
  162. #endif
  163. }
  164. public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  165. {
  166. #if USE_NEW_EDITOR_ANALYTICS
  167. return EditorAnalytics.SendAnalytic(new SpriteShapeAnalyticsEventAnalytic(evt));
  168. #else
  169. return EditorAnalytics.SendEventWithLimit(SpriteShapeAnalyticsEvent.name, evt, version);
  170. #endif
  171. }
  172. public void Dispose() { }
  173. }
  174. }