update: add event bus
							parent
							
								
									1ecd077085
								
							
						
					
					
						commit
						252de80d7d
					
				|  | @ -60,7 +60,7 @@ namespace Guru.Editor | ||||||
|         #region 构建 Android 接口 |         #region 构建 Android 接口 | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         ///  |         /// 构建 Android 包体 | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         /// <param name="buildParam"></param> |         /// <param name="buildParam"></param> | ||||||
|         /// <returns></returns> |         /// <returns></returns> | ||||||
|  |  | ||||||
|  | @ -117,6 +117,7 @@ namespace Guru | ||||||
|         { |         { | ||||||
| 	        _badsloadStartTime = Time.realtimeSinceStartup; | 	        _badsloadStartTime = Time.realtimeSinceStartup; | ||||||
| 	        _chanelMax.LoadBannerAD(); | 	        _chanelMax.LoadBannerAD(); | ||||||
|  | 	        OnBannerStartLoad?.Invoke(_chanelMax.MaxBADSSlotID); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
|  | @ -148,6 +149,7 @@ namespace Guru | ||||||
|         private void OnLoadMaxIV() { |         private void OnLoadMaxIV() { | ||||||
| 	        _iadsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | 	        _iadsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | ||||||
| 	        _chanelMax.LoadInterstitialAD(); | 	        _chanelMax.LoadInterstitialAD(); | ||||||
|  | 	        OnInterstitialStartLoad?.Invoke(_chanelMax.MaxIADSSlotID); | ||||||
|         } |         } | ||||||
|          |          | ||||||
|          |          | ||||||
|  | @ -180,6 +182,7 @@ namespace Guru | ||||||
|         { |         { | ||||||
| 	        _radsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | 	        _radsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | ||||||
| 	        _chanelMax.LoadRewardAD(); | 	        _chanelMax.LoadRewardAD(); | ||||||
|  | 	        OnRewardStartLoad?.Invoke(_chanelMax.MaxRADSSlotID); | ||||||
|         } |         } | ||||||
|      |      | ||||||
|          |          | ||||||
|  |  | ||||||
|  | @ -26,11 +26,14 @@ namespace Guru | ||||||
| 
 | 
 | ||||||
|         protected Action _onSdkInitReady; |         protected Action _onSdkInitReady; | ||||||
|          |          | ||||||
|  |         public static Action<string> OnBannerStartLoad; | ||||||
|         public static Action OnBannerLoaded; |         public static Action OnBannerLoaded; | ||||||
| 
 | 
 | ||||||
|  |         public static Action<string> OnInterstitialStartLoad; | ||||||
|         public static Action OnInterstitialLoaded; |         public static Action OnInterstitialLoaded; | ||||||
|         public static Action OnInterstitialFailed; |         public static Action OnInterstitialFailed; | ||||||
| 
 | 
 | ||||||
|  |         public static Action<string> OnRewardStartLoad; | ||||||
|         public static Action OnRewardLoaded; |         public static Action OnRewardLoaded; | ||||||
|         public static Action OnRewardFailed; |         public static Action OnRewardFailed; | ||||||
| 
 | 
 | ||||||
|  | @ -545,7 +548,7 @@ namespace Guru | ||||||
|             if (IsRadsLoading) return; |             if (IsRadsLoading) return; | ||||||
|              |              | ||||||
|             OnLoadRads(); |             OnLoadRads(); | ||||||
|             var id = GetRewardedVideoID(); |             var id = GetRewardedID(); | ||||||
|             Analytics.ADRadsLoad(AdParams.Build(id)); // 上报打点 |             Analytics.ADRadsLoad(AdParams.Build(id)); // 上报打点 | ||||||
|             MaxSdk.LoadRewardedAd(id); |             MaxSdk.LoadRewardedAd(id); | ||||||
|         } |         } | ||||||
|  | @ -561,7 +564,7 @@ namespace Guru | ||||||
|             if (!IsInitialized) |             if (!IsInitialized) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|             return MaxSdk.IsRewardedAdReady(GetRewardedVideoID()); |             return MaxSdk.IsRewardedAdReady(GetRewardedID()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  | @ -589,7 +592,7 @@ namespace Guru | ||||||
|             _rewardAction = rewardAction; |             _rewardAction = rewardAction; | ||||||
|             _failAction = failAction; |             _failAction = failAction; | ||||||
|             _dismissAction = dismissAction; |             _dismissAction = dismissAction; | ||||||
|             MaxSdk.ShowRewardedAd(GetRewardedVideoID()); |             MaxSdk.ShowRewardedAd(GetRewardedID()); | ||||||
| 
 | 
 | ||||||
|             // RequestRewardedAD(); |             // RequestRewardedAD(); | ||||||
|         } |         } | ||||||
|  | @ -684,7 +687,7 @@ namespace Guru | ||||||
| 
 | 
 | ||||||
|         #region Ad Settings |         #region Ad Settings | ||||||
| 
 | 
 | ||||||
|         protected virtual string GetRewardedVideoID() |         protected virtual string GetRewardedID() | ||||||
|         { |         { | ||||||
|             return GuruSettings.Instance.ADSetting.GetRewardedVideoID(); |             return GuruSettings.Instance.ADSetting.GetRewardedVideoID(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     public static class ADServiceEvent | ||||||
|  |     { | ||||||
|  |         public const string ADSERVICE_READY = "evt_adservice_ready"; | ||||||
|  |          | ||||||
|  |         public const string BADS_LOAD_START = "evt_bads_load_start"; | ||||||
|  |         public const string BADS_LOADED = "evt_bads_loaded"; | ||||||
|  |         public const string BADS_LOAD_FAILED = "evt_bads_load_failed"; | ||||||
|  |         public const string BADS_IMP = "evt_bads_imp"; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 48d4ca9d7e6c4393bf13f6ce619145bc | ||||||
|  | timeCreated: 1714970592 | ||||||
|  | @ -21,9 +21,9 @@ namespace Guru | ||||||
|         #region 广告位 |         #region 广告位 | ||||||
|          |          | ||||||
|         // ---------------- Max 广告位ID --------------------  |         // ---------------- Max 广告位ID --------------------  | ||||||
|         internal string MaxBannerSlotID => GuruSettings.Instance.ADSetting.GetBannerID(); |         internal string MaxBADSSlotID => GuruSettings.Instance.ADSetting.GetBannerID(); | ||||||
|         internal string MaxIVSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID(); |         internal string MaxIADSSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID(); | ||||||
|         internal string MaxRVSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID(); |         internal string MaxRADSSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID(); | ||||||
|          |          | ||||||
|         #endregion |         #endregion | ||||||
|          |          | ||||||
|  | @ -49,11 +49,11 @@ namespace Guru | ||||||
|         { |         { | ||||||
|             // Banners are automatically sized to 320x50 on phones and 728x90 on tablets |             // Banners are automatically sized to 320x50 on phones and 728x90 on tablets | ||||||
|             // You may use the utility method `MaxSdkUtils.isTablet()` to help with view sizing adjustments |             // You may use the utility method `MaxSdkUtils.isTablet()` to help with view sizing adjustments | ||||||
|             MaxSdk.CreateBanner(MaxBannerSlotID, MaxSdkBase.BannerPosition.BottomCenter); |             MaxSdk.CreateBanner(MaxBADSSlotID, MaxSdkBase.BannerPosition.BottomCenter); | ||||||
|             MaxSdk.SetBannerExtraParameter(MaxBannerSlotID, "adaptive_banner", "false"); |             MaxSdk.SetBannerExtraParameter(MaxBADSSlotID, "adaptive_banner", "false"); | ||||||
|             // Set background or background color for banners to be fully functional |             // Set background or background color for banners to be fully functional | ||||||
|             MaxSdk.SetBannerBackgroundColor(MaxBannerSlotID, _backColor); |             MaxSdk.SetBannerBackgroundColor(MaxBADSSlotID, _backColor); | ||||||
|             Analytics.ADBadsLoad(AdParams.Build(MaxBannerSlotID)); |             Analytics.ADBadsLoad(AdParams.Build(MaxBADSSlotID)); | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         public void SetBannerBackColor(string hex) |         public void SetBannerBackColor(string hex) | ||||||
|  | @ -69,8 +69,8 @@ namespace Guru | ||||||
|         public bool IsInterstitialRequestOver => true; |         public bool IsInterstitialRequestOver => true; | ||||||
|         public void LoadInterstitialAD() |         public void LoadInterstitialAD() | ||||||
|         { |         { | ||||||
|             Analytics.ADIadsLoad(AdParams.Build(MaxIVSlotID)); // 上报打点 |             Analytics.ADIadsLoad(AdParams.Build(MaxIADSSlotID)); // 上报打点 | ||||||
|             MaxSdk.LoadInterstitial(MaxIVSlotID); |             MaxSdk.LoadInterstitial(MaxIADSSlotID); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
|  | @ -80,8 +80,8 @@ namespace Guru | ||||||
|         public bool IsRewardRequestOver => true; |         public bool IsRewardRequestOver => true; | ||||||
|         public void LoadRewardAD() |         public void LoadRewardAD() | ||||||
|         { |         { | ||||||
|             Analytics.ADRadsLoad(AdParams.Build(MaxRVSlotID)); // 上报打点 |             Analytics.ADRadsLoad(AdParams.Build(MaxRADSSlotID)); // 上报打点 | ||||||
|             MaxSdk.LoadRewardedAd(MaxRVSlotID); |             MaxSdk.LoadRewardedAd(MaxRADSSlotID); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
|  |  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 31cc00ccd21c4fdc9fb6ea0163677367 | ||||||
|  | timeCreated: 1714955721 | ||||||
|  | @ -0,0 +1,327 @@ | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using System; | ||||||
|  |      | ||||||
|  |     public class EventBus: MonoBehaviour | ||||||
|  |     { | ||||||
|  |         private const string Tag = "[EventBus]"; | ||||||
|  |         private static bool _initOnce = false; | ||||||
|  |         private Dictionary<string, List<Delegate>> _normalEvents; | ||||||
|  |         private Dictionary<string, List<Delegate>> _mainThreadEvents; | ||||||
|  |         private Queue<MainThreadEvent> _mainThreadQueue; | ||||||
|  |         private Queue<MainThreadEvent> _mainThreadEventPool; | ||||||
|  | 
 | ||||||
|  |         private static EventBus _instance; | ||||||
|  |         public static EventBus Instance { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) | ||||||
|  |                 { | ||||||
|  |                     if (GuruSDKCallback.Instance != null) | ||||||
|  |                     { | ||||||
|  |                         _instance = AttachOnHost(GuruSDKCallback.Instance); // Set to the host object | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return _instance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static EventBus AttachOnHost(GameObject go) | ||||||
|  |         { | ||||||
|  |             var ins = go.AddComponent<EventBus>(); | ||||||
|  |             ins.Init(); | ||||||
|  |             return ins; | ||||||
|  |         } | ||||||
|  |         public static EventBus AttachOnHost(Component component) | ||||||
|  |         { | ||||||
|  |             return component.gameObject.AddComponent<EventBus>(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #region API | ||||||
|  | 
 | ||||||
|  |         public static void Bind(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             if (Instance == null) | ||||||
|  |             { | ||||||
|  |                 LogE($"{Tag} EventBus is not ready"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Instance.AddNormalEvent(evtName, callback); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static void UnBind(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             if (Instance == null) | ||||||
|  |             { | ||||||
|  |                 LogE($"{Tag} EventBus is not ready"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Instance.RemoveNormalEvent(evtName, callback); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static void BindOnMainThread(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             if (Instance == null) | ||||||
|  |             { | ||||||
|  |                 LogE($"{Tag} EventBus is not ready"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Instance.AddNormalEventOnMainThread(evtName, callback); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public static void UnBindOnMainThread(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             if (Instance == null) | ||||||
|  |             { | ||||||
|  |                 LogE($"{Tag} EventBus is not ready"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Instance.RemoveNormalEventOnMainThread(evtName, callback); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static void Send(string evtName, object evt) | ||||||
|  |         { | ||||||
|  |             if (Instance == null) | ||||||
|  |             { | ||||||
|  |                 LogE($"{Tag} EventBus is not ready"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Instance.FireEvent(evtName, evt); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region Initialize Functions | ||||||
|  | 
 | ||||||
|  |         private void Init() | ||||||
|  |         { | ||||||
|  |             if (_initOnce) return; | ||||||
|  |             _initOnce = true; | ||||||
|  |              | ||||||
|  |             _normalEvents = new Dictionary<string, List<Delegate>>(20); | ||||||
|  |             _mainThreadEvents = new Dictionary<string, List<Delegate>>(20); | ||||||
|  |             _mainThreadQueue = new Queue<MainThreadEvent>(20); | ||||||
|  |             _mainThreadEventPool = new Queue<MainThreadEvent>(20); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void AddEvent(string evtName, Action<object> callback, ref Dictionary<string, List<Delegate>> dict) | ||||||
|  |         { | ||||||
|  |             if (dict == null) dict = new Dictionary<string, List<Delegate>>(20); | ||||||
|  |              | ||||||
|  |             if (!IsEventExists(evtName, dict)) | ||||||
|  |             { | ||||||
|  |                 dict[evtName] = new List<Delegate>(20); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!dict[evtName].Contains(callback)) | ||||||
|  |             { | ||||||
|  |                 dict[evtName].Add(callback); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         private void RemoveEvent(string evtName, Action<object> callback, ref Dictionary<string, List<Delegate>> dict) | ||||||
|  |         { | ||||||
|  | 
 | ||||||
|  |             if (dict == null) | ||||||
|  |             { | ||||||
|  |                 dict = new Dictionary<string, List<Delegate>>(20); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             if (IsEventExists(evtName, dict) && dict[evtName].Contains(callback)) | ||||||
|  |             { | ||||||
|  |                 dict[evtName].Remove(callback); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private bool IsEventExists(string eventName, Dictionary<string , List<Delegate>> events) | ||||||
|  |         { | ||||||
|  |             if(events == null) return false; | ||||||
|  |             return events.ContainsKey(eventName); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Normal Events | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         private void AddNormalEvent(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             AddEvent(evtName, callback, ref _normalEvents); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void AddNormalEventOnMainThread(string evtName,  Action<object> callback) | ||||||
|  |         { | ||||||
|  |             AddEvent(evtName, callback, ref _mainThreadEvents); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void RemoveNormalEvent(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             RemoveEvent(evtName, callback, ref _normalEvents); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void RemoveNormalEventOnMainThread(string evtName, Action<object> callback) | ||||||
|  |         { | ||||||
|  |             RemoveEvent(evtName, callback, ref _mainThreadEvents); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void FireEvent(string evtName, object evtObject) | ||||||
|  |         { | ||||||
|  |             // ---------- Normal Events ------------ | ||||||
|  |             if (_normalEvents.TryGetValue(evtName, out var listeners)) | ||||||
|  |             { | ||||||
|  |                 int i = 0; | ||||||
|  |                 while (i < listeners.Count) | ||||||
|  |                 { | ||||||
|  |                     listeners[i]?.DynamicInvoke(evtObject); | ||||||
|  |                     i++; | ||||||
|  |                 } | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // ---------- Main Thread Events ------------ | ||||||
|  |             if (IsEventExists(evtName, _mainThreadEvents)) | ||||||
|  |             { | ||||||
|  |                 AddEventToMainThread(evtName, evtObject); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             // ---------- Send Events Failed ------------ | ||||||
|  |             LogE($"{Tag} EventBus:: Fire event [{evtName}] not found"); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Logger | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private static void LogI(object msg) | ||||||
|  |         { | ||||||
|  |             UnityEngine.Debug.Log(msg); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private static void LogE(object msg) | ||||||
|  |         { | ||||||
|  |             UnityEngine.Debug.LogError(msg); | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region Mono Lifecycle | ||||||
|  | 
 | ||||||
|  |         private void Update() | ||||||
|  |         { | ||||||
|  |             ConsumeMainThreadEvent(); // 消费主线程事件 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region ThreadQueueInfo | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         internal struct MainThreadEvent | ||||||
|  |         { | ||||||
|  | 
 | ||||||
|  |             public string eventName; | ||||||
|  |             public object eventBody; | ||||||
|  | 
 | ||||||
|  |             public void Setup(string evtName, object evtBody) | ||||||
|  |             { | ||||||
|  |                 eventName = evtName; | ||||||
|  |                 eventBody = evtBody; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             public void Clear() | ||||||
|  |             { | ||||||
|  |                 eventName = null; | ||||||
|  |                 eventBody = null; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private MainThreadEvent GetMainThreadEvent(string evtName, object evtBody) | ||||||
|  |         { | ||||||
|  |             MainThreadEvent evt; | ||||||
|  |             if (_mainThreadEventPool != null && _mainThreadEventPool.Count > 0) | ||||||
|  |             { | ||||||
|  |                 evt  = _mainThreadEventPool.Dequeue(); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 evt = new MainThreadEvent(); | ||||||
|  |             } | ||||||
|  |             evt.Setup(evtName, evtBody); | ||||||
|  |             return evt; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void AddEventToMainThread(string evtName, object evtBody) | ||||||
|  |         { | ||||||
|  |             if(_mainThreadQueue == null) _mainThreadQueue = new Queue<MainThreadEvent>(20); | ||||||
|  |             _mainThreadQueue.Enqueue(GetMainThreadEvent(evtName, evtBody)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void SaveMainThreadEvent(MainThreadEvent evt) | ||||||
|  |         { | ||||||
|  |             if (_mainThreadEventPool == null) | ||||||
|  |             { | ||||||
|  |                 _mainThreadEventPool = new Queue<MainThreadEvent>(20); | ||||||
|  |             } | ||||||
|  |             evt.Clear(); | ||||||
|  |             _mainThreadEventPool.Enqueue(evt); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         private void ConsumeMainThreadEvent() | ||||||
|  |         { | ||||||
|  |             if (_mainThreadQueue != null && _mainThreadQueue.Count > 0) | ||||||
|  |             { | ||||||
|  |                 while (_mainThreadQueue.Count > 0) | ||||||
|  |                 { | ||||||
|  |                     var evt  = _mainThreadQueue.Dequeue(); | ||||||
|  |                     FireEvent(evt.eventName, evt.eventBody); | ||||||
|  |                     SaveMainThreadEvent(evt); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 5e386f6917c242d48ba0913b1c2713ce | ||||||
|  | timeCreated: 1714955737 | ||||||
|  | @ -5,7 +5,7 @@ namespace Guru | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     public partial class GameDefine |     public partial class GameDefine | ||||||
|     { |     { | ||||||
|         public static string CompanyName = "Guru Fun Game Studio"; |         public static string CompanyName = "Guru Game"; | ||||||
|         public const string MACRO_LOG = "ENABLE_LOG"; |         public const string MACRO_LOG = "ENABLE_LOG"; | ||||||
|         public const string MACRO_DEBUG = "DEBUG"; |         public const string MACRO_DEBUG = "DEBUG"; | ||||||
|         public const string MACRO_RELEASE = "RELEASE"; |         public const string MACRO_RELEASE = "RELEASE"; | ||||||
|  |  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d717553eea6bf4338b9f3059be371e71 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,60 @@ | ||||||
|  | # Guru Debugger 面板 | ||||||
|  | 
 | ||||||
|  | Version 1.0.0 | ||||||
|  | 
 | ||||||
|  | # 使用方法 | ||||||
|  | 
 | ||||||
|  | 调用方式, 可直接调用 | ||||||
|  | 
 | ||||||
|  | ```c# | ||||||
|  | // 首次调用需要初始化 | ||||||
|  | Debugger.Init(): | ||||||
|  | 
 | ||||||
|  | // TODO: 加入你的Layout初始化方法      | ||||||
|  |      | ||||||
|  | // 显示 Debugger: | ||||||
|  | Debuggger.Show(); | ||||||
|  | 
 | ||||||
|  | // 关闭回调 | ||||||
|  | Debugger.OnClose += OnDebuggerClose;   | ||||||
|  |   | ||||||
|  | private void OnDebuggerClose(){ | ||||||
|  |      | ||||||
|  |     // TODO: do sth when debugger is closed  | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Layout 初始化 | ||||||
|  | ```c# | ||||||
|  | // 添加一个条目 | ||||||
|  | // 一般一个条目的构成为  {tab}/{option} 的方式 | ||||||
|  | 
 | ||||||
|  | // 添加一个 Key - Value item  | ||||||
|  | Debugger.Instance.AddOption("Start Info/Test Key", "Test Value"); | ||||||
|  | 
 | ||||||
|  | // 添加一个整体可点击的 Item | ||||||
|  | Debugger.Instance.AddOption("Start Info/Yes, click me", "", () => { | ||||||
|  |     // TODO: the item is a pure button, add click event. | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // 添加一个 Button | ||||||
|  | Debugger.Instance.AddOption("Start Info/Test Key", "Test Value") | ||||||
|  |     .AddButton("Button", ()=>{ | ||||||
|  |         // TODO: do sth when button is clicked | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  | // Option 可以添加更多的内容, 但是不建议超过 5 个 | ||||||
|  | Debugger.Instance.AddOption("Start Info/Test2", "valueof2") | ||||||
|  |     .AddLabel("Sth else to add") | ||||||
|  |     .AddCopyButton(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 48c5db714459493d8d02ecaf89f1c2ac | ||||||
|  | timeCreated: 1711084921 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 036a24160e57d414290c124d76a4a66f | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d58fb9f98adf4830b25ff52a810ffdd6 | ||||||
|  | timeCreated: 1714471155 | ||||||
|  | @ -0,0 +1,42 @@ | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     public class AdStatus | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         private static AdStatusPresenter _adp; | ||||||
|  | 
 | ||||||
|  |         private static bool _inited; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public static void Install() | ||||||
|  |         { | ||||||
|  |             if (_inited) return; | ||||||
|  |             _inited = true; | ||||||
|  |             _adp = new AdStatusPresenter(); | ||||||
|  |             _adp.Init(); | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static void ShowMonitor() | ||||||
|  |         { | ||||||
|  |             if(!_inited) Install(); | ||||||
|  | 
 | ||||||
|  |             if (_adp != null) | ||||||
|  |             { | ||||||
|  |                 _adp.ShowMonitor(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static void HideMonitor() | ||||||
|  |         { | ||||||
|  |             if(!_inited) Install(); | ||||||
|  | 
 | ||||||
|  |             if (_adp != null) | ||||||
|  |             { | ||||||
|  |                 _adp.HideMonitor(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 2d3bb9dff8e44e5c8d76a505ebf0e5c0 | ||||||
|  | timeCreated: 1714188842 | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     public class AdStatusConsts | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         public static readonly int MaxInfoCount = 20; | ||||||
|  |         public static readonly string ColorGreen = "88FF00"; | ||||||
|  |         public static readonly string ColorRed = "FF0000"; | ||||||
|  |         public static readonly string ColorGray = "747474"; | ||||||
|  |         public static readonly string ColorYellow = "FFE700"; | ||||||
|  |         public static readonly float MonitorStartAlpha = 0.72f; | ||||||
|  |         public static readonly float MonitorStayTime = 5f; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 707f290f7f5a40959be9a2e4cc3f7196 | ||||||
|  | timeCreated: 1714190216 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: afeefc6f0b0b4a88b274a24366952bd1 | ||||||
|  | timeCreated: 1714189118 | ||||||
|  | @ -0,0 +1,59 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 广告类型 | ||||||
|  |     /// </summary> | ||||||
|  |     public enum AdType | ||||||
|  |     { | ||||||
|  |         Banner, | ||||||
|  |         Interstitial, | ||||||
|  |         Rewarded, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 广告状态枚举 | ||||||
|  |     /// </summary> | ||||||
|  |     public enum AdStatusType | ||||||
|  |     { | ||||||
|  |         NotReady, | ||||||
|  |         Loading, | ||||||
|  |         Loaded, | ||||||
|  |         LoadFailed, | ||||||
|  |         DisplayFailed, | ||||||
|  |         Closed, | ||||||
|  |         Paid, | ||||||
|  |         Clicked | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 广告状态信息 | ||||||
|  |     /// </summary> | ||||||
|  |     public class AdStatusInfo | ||||||
|  |     { | ||||||
|  |         public string adUnitId; | ||||||
|  |         public AdType adType; | ||||||
|  |         public AdStatusType status = AdStatusType.NotReady; | ||||||
|  |         public string info; | ||||||
|  |         public DateTime date; | ||||||
|  |         public string network; | ||||||
|  |         public string creativeId; | ||||||
|  |         public double revenue; | ||||||
|  |         public string waterfall; | ||||||
|  |         public string format; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public string GetDate() => date.ToString("yy-MM-dd HH:mm:ss"); | ||||||
|  | 
 | ||||||
|  |         public string ToLogString() | ||||||
|  |         { | ||||||
|  |             return $"[{GetDate()}] {adType}:{status}\tid:{adUnitId}\tname:{format}\tnetwork{network}\trevenue:{revenue}\twaterfall:{waterfall}\tinfo:{info}"; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: acca1ff8fa8e4b22a42b1e99d6f0da06 | ||||||
|  | timeCreated: 1714189132 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: a03478ca777c43ce8cbf5e029732621f | ||||||
|  | timeCreated: 1714189110 | ||||||
|  | @ -0,0 +1,68 @@ | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     public class AdStatusModel | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public string monitorInfo; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public int bannerTotalCount = 0; | ||||||
|  |         public int bannerSuccessCount = 0; | ||||||
|  |         public int bannerFailCount = 0; | ||||||
|  |          | ||||||
|  |         public int interstitialTotalCount = 0; | ||||||
|  |         public int interstitialSuccessCount = 0; | ||||||
|  |         public int interstitialFailCount = 0; | ||||||
|  |          | ||||||
|  |         public int rewardedTotalCount = 0; | ||||||
|  |         public int rewardedSuccessCount = 0; | ||||||
|  |         public int rewardedFailCount = 0; | ||||||
|  |          | ||||||
|  |         public void AddBannerCount(bool success) | ||||||
|  |         { | ||||||
|  |             bannerTotalCount++; | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 bannerSuccessCount++; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 bannerFailCount++; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void AddInterCount(bool success) | ||||||
|  |         { | ||||||
|  |             interstitialTotalCount++; | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 interstitialSuccessCount++; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 interstitialFailCount++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void AddRewardCount(bool success) | ||||||
|  |         { | ||||||
|  |             rewardedTotalCount++; | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 rewardedSuccessCount++; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 rewardedFailCount++; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 0d43f5b89b964c17bc59f0e51dbe472b | ||||||
|  | timeCreated: 1714180020 | ||||||
|  | @ -0,0 +1,111 @@ | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine.EventSystems; | ||||||
|  | 
 | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |     using Consts=AdStatusConsts; | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |     public class AdStatusMonitorView : MonoBehaviour, IDragHandler, IEndDragHandler, IBeginDragHandler, IPointerClickHandler | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         public bool Active | ||||||
|  |         { | ||||||
|  |             get => gameObject.activeSelf; | ||||||
|  |             set => gameObject.SetActive(value); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public float Alpha | ||||||
|  |         { | ||||||
|  |             get => _canvasGroup?.alpha ?? 0; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 if(_canvasGroup != null)  | ||||||
|  |                     _canvasGroup.alpha = value; | ||||||
|  |             }  | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         [SerializeField] private CanvasGroup _canvasGroup; | ||||||
|  |         [SerializeField] private Text _txtInfo; | ||||||
|  |         private IPointerClickHandler _pointerClickHandlerImplementation; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private DateTime _clickStartDate; | ||||||
|  |         private bool _isOnDraging = false; | ||||||
|  | 
 | ||||||
|  |         public Action OnClickHandler; | ||||||
|  |         public Action OnDestryHandler; | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         // Start is called before the first frame update | ||||||
|  |         void Awake() | ||||||
|  |         { | ||||||
|  |             Alpha = Consts.MonitorStartAlpha; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void OnDrag(PointerEventData eventData) | ||||||
|  |         { | ||||||
|  |             var delat = eventData.delta; | ||||||
|  |             transform.localPosition += new Vector3(delat.x, delat.y, 0); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         public void OnBeginDrag(PointerEventData eventData) | ||||||
|  |         { | ||||||
|  |             Alpha = 1; | ||||||
|  |             // _clickStartDate = DateTime.Now; | ||||||
|  |             _isOnDraging = true; | ||||||
|  |         } | ||||||
|  |         public void OnEndDrag(PointerEventData eventData) | ||||||
|  |         { | ||||||
|  |             // var sp = DateTime.Now - _clickStartDate; | ||||||
|  |             // Debug.Log($"Drag Time: {sp.TotalSeconds}"); | ||||||
|  |             _isOnDraging = false; | ||||||
|  |             OnPanelActivated(); | ||||||
|  |         } | ||||||
|  |         public void OnPointerClick(PointerEventData eventData) | ||||||
|  |         { | ||||||
|  |             if (_isOnDraging) return; | ||||||
|  |             // Debug.Log($"Click Handler delta: {eventData.delta}      isMoving: {eventData.IsPointerMoving()}"); | ||||||
|  |             OnClickHandler?.Invoke(); | ||||||
|  |             OnPanelActivated(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 数据刷新 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="info"></param> | ||||||
|  |         public void OnUpdateInfo(string info) | ||||||
|  |         { | ||||||
|  |             _txtInfo.text = info; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         private void OnPanelActivated() | ||||||
|  |         { | ||||||
|  |             Alpha = 1; | ||||||
|  |             CancelInvoke(nameof(OnbResetAlpha)); | ||||||
|  |             Invoke(nameof(OnbResetAlpha), Consts.MonitorStayTime); // 自动置灰 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void OnbResetAlpha() | ||||||
|  |         { | ||||||
|  |             if (_canvasGroup == null) return; | ||||||
|  |             Alpha = Consts.MonitorStartAlpha; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: ed7d7e0d6ce2048c1bacbd901b97c752 | ||||||
|  | MonoImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   defaultReferences: [] | ||||||
|  |   executionOrder: 0 | ||||||
|  |   icon: {instanceID: 0} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,416 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using System.Text; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using Consts=AdStatusConsts; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public partial class AdStatusPresenter | ||||||
|  |     { | ||||||
|  |         private Queue<AdStatusInfo> _bannerInfos; | ||||||
|  |         private Queue<AdStatusInfo> _interInfos; | ||||||
|  |         private Queue<AdStatusInfo> _rewardInfos; | ||||||
|  | 
 | ||||||
|  |         private AdStatusInfo _curBadsInfo; | ||||||
|  |         private AdStatusInfo _curIadsInfo; | ||||||
|  |         private AdStatusInfo _curRadsInfo; | ||||||
|  |          | ||||||
|  |         #region InfoContainer | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 添加对应的 Info | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="info"></param> | ||||||
|  |         private void AddBannerInfo(AdStatusInfo info) | ||||||
|  |         { | ||||||
|  |             if (_bannerInfos.Count >= AdStatusConsts.MaxInfoCount) | ||||||
|  |             { | ||||||
|  |                 _bannerInfos.Dequeue(); | ||||||
|  |             } | ||||||
|  |             Debug.Log(info.ToLogString()); | ||||||
|  |             _bannerInfos.Enqueue(info); | ||||||
|  |             _curBadsInfo = info; | ||||||
|  |             OnStatueChanged(info); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void AddInterInfo(AdStatusInfo info) | ||||||
|  |         { | ||||||
|  |             if (_interInfos.Count >= AdStatusConsts.MaxInfoCount) | ||||||
|  |             { | ||||||
|  |                 _interInfos.Dequeue(); | ||||||
|  |             } | ||||||
|  |             _interInfos.Enqueue(info); | ||||||
|  |             _curIadsInfo = info; | ||||||
|  |             OnStatueChanged(info); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void AddRewardInfo(AdStatusInfo info) | ||||||
|  |         { | ||||||
|  |             if (_rewardInfos.Count >= AdStatusConsts.MaxInfoCount) | ||||||
|  |             { | ||||||
|  |                 _rewardInfos.Dequeue(); | ||||||
|  |             } | ||||||
|  |             _rewardInfos.Enqueue(info); | ||||||
|  |             _curRadsInfo = info; | ||||||
|  |             OnStatueChanged(info); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void OnStatueChanged(AdStatusInfo info) | ||||||
|  |         { | ||||||
|  |             _model.monitorInfo = CreateMonitorInfo(); | ||||||
|  |              | ||||||
|  |             if (info != null) | ||||||
|  |             { | ||||||
|  |                 int code = 0; | ||||||
|  |                 if (info.status == AdStatusType.LoadFailed || info.status == AdStatusType.DisplayFailed) | ||||||
|  |                 { | ||||||
|  |                     code = -1; | ||||||
|  |                 } | ||||||
|  |                 else if (info.status == AdStatusType.Loaded) | ||||||
|  |                 { | ||||||
|  |                     code = 1; | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |                 switch (info.adType) | ||||||
|  |                 { | ||||||
|  |                     case AdType.Banner: | ||||||
|  |                         if(code == 1) _model.AddBannerCount(true); | ||||||
|  |                         else if(code == -1) _model.AddBannerCount(false); | ||||||
|  |                         break; | ||||||
|  |                     case AdType.Interstitial: | ||||||
|  |                         if(code == 1) _model.AddInterCount(true); | ||||||
|  |                         else if(code == -1) _model.AddInterCount(false); | ||||||
|  |                         break; | ||||||
|  |                     case AdType.Rewarded: | ||||||
|  |                         if(code == 1) _model.AddRewardCount(true); | ||||||
|  |                         else if(code == -1) _model.AddRewardCount(false); | ||||||
|  |                         break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             UpdateView(); // 刷新视图 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private string CreateMonitorInfo() | ||||||
|  |         { | ||||||
|  |             string msg = ""; | ||||||
|  |             bool loaded = false; | ||||||
|  |              | ||||||
|  |              | ||||||
|  |              | ||||||
|  |             StringBuilder sb = new StringBuilder(); | ||||||
|  | 
 | ||||||
|  |             if (GuruSDK.IsAdsReady) | ||||||
|  |             { | ||||||
|  |                 msg = ColoredText("AdService not initialized...", Consts.ColorRed); | ||||||
|  |                 return msg; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             if (_curBadsInfo == null) | ||||||
|  |             { | ||||||
|  |                 msg = $"BADS: {ColoredText("not ready", Consts.ColorRed)}\n"; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  | 
 | ||||||
|  |                 switch (_curBadsInfo.status) | ||||||
|  |                 { | ||||||
|  |                     case AdStatusType.Loaded: | ||||||
|  |                         msg = $"BADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.LoadFailed: | ||||||
|  |                         msg = $"BADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.DisplayFailed: | ||||||
|  |                         msg = $"BADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n"; | ||||||
|  |                         break;   | ||||||
|  |                     case AdStatusType.Loading: | ||||||
|  |                         msg = $"BADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curBadsInfo.format}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.Paid: | ||||||
|  |                         msg = $"BADS: {ColoredText("display", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\trevenue: {_curBadsInfo.revenue}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.NotReady: | ||||||
|  |                         msg = $"BADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; | ||||||
|  |                         break; | ||||||
|  |                     default: | ||||||
|  |                         msg = $"BADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curBadsInfo.status}", Consts.ColorYellow)}\n"; | ||||||
|  |                         break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             sb.Append(msg); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             if (_curIadsInfo == null) | ||||||
|  |             { | ||||||
|  |                 msg = $"IADS: {ColoredText("not ready", Consts.ColorRed)}\n"; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 switch (_curIadsInfo.status) | ||||||
|  |                 { | ||||||
|  |                     case AdStatusType.Loaded: | ||||||
|  |                         msg = $"IADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.LoadFailed: | ||||||
|  |                         msg = $"IADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.DisplayFailed: | ||||||
|  |                         msg = $"IADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; | ||||||
|  |                         break;   | ||||||
|  |                     case AdStatusType.Loading: | ||||||
|  |                         msg = $"IADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curIadsInfo.format}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.Paid: | ||||||
|  |                         msg = $"IADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curIadsInfo.revenue}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.NotReady: | ||||||
|  |                         msg = $"IADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; | ||||||
|  |                         break; | ||||||
|  |                     default: | ||||||
|  |                         msg = $"IADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curIadsInfo.status}", Consts.ColorYellow)}\n"; | ||||||
|  |                         break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             sb.Append(msg); | ||||||
|  |              | ||||||
|  | 
 | ||||||
|  |             if (_curRadsInfo == null) | ||||||
|  |             { | ||||||
|  |                 msg = $"RADS: {ColoredText("not ready", Consts.ColorRed)}\n"; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 switch (_curRadsInfo.status) | ||||||
|  |                 { | ||||||
|  |                     case AdStatusType.Loaded: | ||||||
|  |                         msg = $"RADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curRadsInfo.network}\n\twaterfall: {_curRadsInfo.waterfall}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.LoadFailed: | ||||||
|  |                         msg = $"RADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.DisplayFailed: | ||||||
|  |                         msg = $"RADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n"; | ||||||
|  |                         break;   | ||||||
|  |                     case AdStatusType.Loading: | ||||||
|  |                         msg = $"RADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curRadsInfo.format}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.Paid: | ||||||
|  |                         msg = $"RADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curRadsInfo.revenue}\n"; | ||||||
|  |                         break; | ||||||
|  |                     case AdStatusType.NotReady: | ||||||
|  |                         msg = $"RADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; | ||||||
|  |                         break; | ||||||
|  |                     default: | ||||||
|  |                         msg = $"RADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curRadsInfo.status}", Consts.ColorYellow)}\n"; | ||||||
|  |                         break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             sb.Append(msg); | ||||||
|  |              | ||||||
|  |              | ||||||
|  |             return sb.ToString(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private string ColoredText(string content, string hexColor = "000000") | ||||||
|  |         { | ||||||
|  |             return $"<color=#{hexColor}>{content}</color>"; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         #region AppLovin | ||||||
|  | 
 | ||||||
|  |         private void InitAdsCallbacks() | ||||||
|  |         { | ||||||
|  |             AddCallbacks(); | ||||||
|  | 
 | ||||||
|  |             _bannerInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount); | ||||||
|  |             _interInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount); | ||||||
|  |             _rewardInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount);     | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void AddCallbacks() | ||||||
|  |         { | ||||||
|  |             //----------------- Banner ----------------- | ||||||
|  |             GuruSDK.Callbacks.Ads.OnBannerADStartLoad += OnBannerAdLoadEvent; | ||||||
|  |             MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent; | ||||||
|  |             MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailEvent; | ||||||
|  |             MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent; | ||||||
|  |             MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent; | ||||||
|  |             //----------------- Interstitials ----------------- | ||||||
|  |             GuruSDK.Callbacks.Ads.OnInterstitialADStartLoad += OnInterAdLoadEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterAdLoadedEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterAdLoadFailEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterAdDisplayFailEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterAdRevenuePaidEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterAdClickedEvent; | ||||||
|  |             MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterAdHiddenEvent; | ||||||
|  |             //----------------- Reward ----------------- | ||||||
|  |             Guru.GuruSDK.Callbacks.Ads.OnRewardedADStartLoad += OnRewardedStartLoad; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardAdLoadedEvent; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardAdLoadFailEvent; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardAdDisplayFailEvent; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardAdRevenuePaidEvent; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardAdClickedEvent; | ||||||
|  |             MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardAdHiddenEvent; | ||||||
|  |              | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         //-------------- Banner ------------------ | ||||||
|  |         private void OnBannerAdLoadEvent(string adUnitId) | ||||||
|  |         { | ||||||
|  |             AddBannerInfo(CreateLoadingInfo(adUnitId, AdType.Banner)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddBannerInfo(CreateLoadedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnBannerAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = errorInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             var format = "BADS"; | ||||||
|  |             var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}"; | ||||||
|  |             var network = "error"; | ||||||
|  |             AddBannerInfo(CreateFailInfo(adUnitId, AdType.Banner, network, format, waterfall, msg)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddBannerInfo(CreateClosedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddBannerInfo(CreatePaidInfo(adUnitId, AdType.Banner, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         //----------------- Interstitial ----------------- | ||||||
|  |         private void OnInterAdLoadEvent(string adUnitId) | ||||||
|  |         { | ||||||
|  |             AddInterInfo(CreateLoadingInfo(adUnitId, AdType.Interstitial)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnInterAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddInterInfo(CreateClosedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnInterAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddInterInfo(CreateClickedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnInterAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddInterInfo(CreatePaidInfo(adUnitId, AdType.Interstitial, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnInterAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = errorInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             var format = "IADS"; | ||||||
|  |             var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}"; | ||||||
|  |             var network = "error"; | ||||||
|  |             AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnInterAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = errorInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             var format = adInfo.AdFormat; | ||||||
|  |             var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}"; | ||||||
|  |             var network = adInfo.NetworkName; | ||||||
|  |             AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg, true)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnInterAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddInterInfo(CreateLoadedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         //----------------- Reward ----------------- | ||||||
|  |         private void OnRewardedStartLoad(string adUnitId) | ||||||
|  |         { | ||||||
|  |             AddRewardInfo(CreateLoadingInfo(adUnitId, AdType.Rewarded)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnRewardAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddRewardInfo(CreateClosedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnRewardAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddRewardInfo(CreateClickedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnRewardAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddRewardInfo(CreatePaidInfo(adUnitId, AdType.Rewarded, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnRewardAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = errorInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             var format = "IADS"; | ||||||
|  |             var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}"; | ||||||
|  |             var network = "error"; | ||||||
|  |             AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnRewardAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = errorInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             var format = adInfo.AdFormat; | ||||||
|  |             var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}"; | ||||||
|  |             var network = adInfo.NetworkName; | ||||||
|  |             AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg, true)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnRewardAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) | ||||||
|  |         { | ||||||
|  |             var waterfall = adInfo.WaterfallInfo?.Name ?? ""; | ||||||
|  |             AddRewardInfo(CreateLoadedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 17f2898f0a96448f91b71112d7bf19dc | ||||||
|  | timeCreated: 1714190118 | ||||||
|  | @ -0,0 +1,101 @@ | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public partial class AdStatusPresenter | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         internal static AdStatusInfo CreateLoadingInfo(string adUnitId, AdType adType) | ||||||
|  |         { | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = AdStatusType.Loading, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |         internal static AdStatusInfo CreateLoadedInfo(string adUnitId, AdType adType, string network, string format, string waterfall) | ||||||
|  |         { | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = AdStatusType.Loaded, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |                 network = network, | ||||||
|  |                 format = format, | ||||||
|  |                 waterfall = waterfall | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         internal static AdStatusInfo CreateFailInfo(string adUnitId, AdType adType, string network, string format, string waterfall, string message = "", bool disPlayError = false) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(network)) network = "unknown"; | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = disPlayError ? AdStatusType.LoadFailed : AdStatusType.DisplayFailed, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |                 info = message, | ||||||
|  |                 network = network, | ||||||
|  |                 format = format, | ||||||
|  |                 waterfall = waterfall | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         internal static AdStatusInfo CreateClosedInfo(string adUnitId, AdType adType, string network, string format, string waterfall) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(network)) network = "unknown"; | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = AdStatusType.Closed, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |                 network = network, | ||||||
|  |                 format = format, | ||||||
|  |                 waterfall = waterfall | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |     | ||||||
|  |          | ||||||
|  |         internal static AdStatusInfo CreatePaidInfo(string adUnitId, AdType adType, double revenue, string network, string format, string waterfall) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(network)) network = "unknown"; | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = AdStatusType.Paid, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |                 revenue = revenue, | ||||||
|  |                 network = network, | ||||||
|  |                 format = format, | ||||||
|  |                 waterfall = waterfall | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         internal static AdStatusInfo CreateClickedInfo(string adUnitId, AdType adType, string network, string format, string waterfall) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(network)) network = "unknown"; | ||||||
|  |             return new AdStatusInfo | ||||||
|  |             { | ||||||
|  |                 adUnitId = adUnitId, | ||||||
|  |                 adType = adType, | ||||||
|  |                 status = AdStatusType.Clicked, | ||||||
|  |                 date = DateTime.Now, | ||||||
|  |                 network = network, | ||||||
|  |                 format = format, | ||||||
|  |                 waterfall = waterfall | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 70de9f517f574b00ad3b5e88933bba06 | ||||||
|  | timeCreated: 1714189561 | ||||||
|  | @ -0,0 +1,81 @@ | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     public partial class AdStatusPresenter | ||||||
|  |     { | ||||||
|  |         const string K_DEBUGGER_ROOT = "ui/debugger_root"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private AdStatusMonitorView _monitor; | ||||||
|  | 
 | ||||||
|  |         private AdStatusModel _model; | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void Init() | ||||||
|  |         { | ||||||
|  |             _model = new AdStatusModel(); | ||||||
|  |              | ||||||
|  |             LoadDebuggerRoot(); | ||||||
|  |             InitAdsCallbacks(); | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Debugger Root | ||||||
|  |         /// </summary> | ||||||
|  |         private void LoadDebuggerRoot() | ||||||
|  |         { | ||||||
|  |             var prefab = Resources.Load<GameObject>(K_DEBUGGER_ROOT); | ||||||
|  | 
 | ||||||
|  |             if (prefab != null) | ||||||
|  |             { | ||||||
|  |                 var go = GameObject.Instantiate(prefab); | ||||||
|  |                 go.name = "__debugger_root__"; | ||||||
|  |                  | ||||||
|  |                 var t = go.transform.Find("root/ads_status_monitor"); | ||||||
|  |                 if (t != null) | ||||||
|  |                 { | ||||||
|  |                     _monitor = t.GetComponent<AdStatusMonitorView>(); | ||||||
|  |                     if (_monitor != null) | ||||||
|  |                     { | ||||||
|  |                         _monitor.OnUpdateInfo("ads is on loading..."); | ||||||
|  |                         _monitor.Active = false; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void UpdateView() | ||||||
|  |         { | ||||||
|  |             if (_model == null) return; | ||||||
|  |              | ||||||
|  |             _monitor.OnUpdateInfo(_model.monitorInfo); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         internal void ShowMonitor() | ||||||
|  |         { | ||||||
|  |             if (_monitor == null) return; | ||||||
|  |             _monitor.Active = true; | ||||||
|  |         } | ||||||
|  |         internal void HideMonitor() | ||||||
|  |         { | ||||||
|  |             if (_monitor == null) return; | ||||||
|  |             _monitor.Active = false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 85c881cbd1224a23a1e305a13602fe0a | ||||||
|  | timeCreated: 1714180008 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d0d21acdf9214513b93ebcc7b58f2c8d | ||||||
|  | timeCreated: 1714136951 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 326887151680842e4ad2390b0dfa1953 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,331 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &5150702560827386885 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 5150702560827386906} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: root | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &5150702560827386906 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702560827386885} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 5150702562168738941} | ||||||
|  |   m_Father: {fileID: 5150702561338006477} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 1} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 0} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!1 &5150702561338006473 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 5150702561338006477} | ||||||
|  |   - component: {fileID: 5150702561338006476} | ||||||
|  |   - component: {fileID: 5150702561338006479} | ||||||
|  |   - component: {fileID: 5150702561338006478} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: debugger_root | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &5150702561338006477 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702561338006473} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 0, y: 0, z: 0} | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 5150702560827386906} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 0} | ||||||
|  |   m_Pivot: {x: 0, y: 0} | ||||||
|  | --- !u!223 &5150702561338006476 | ||||||
|  | Canvas: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702561338006473} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 3 | ||||||
|  |   m_RenderMode: 0 | ||||||
|  |   m_Camera: {fileID: 0} | ||||||
|  |   m_PlaneDistance: 100 | ||||||
|  |   m_PixelPerfect: 0 | ||||||
|  |   m_ReceivesEvents: 1 | ||||||
|  |   m_OverrideSorting: 0 | ||||||
|  |   m_OverridePixelPerfect: 0 | ||||||
|  |   m_SortingBucketNormalizedSize: 0 | ||||||
|  |   m_AdditionalShaderChannelsFlag: 0 | ||||||
|  |   m_SortingLayerID: 0 | ||||||
|  |   m_SortingOrder: 2000 | ||||||
|  |   m_TargetDisplay: 0 | ||||||
|  | --- !u!114 &5150702561338006479 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702561338006473} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_UiScaleMode: 1 | ||||||
|  |   m_ReferencePixelsPerUnit: 100 | ||||||
|  |   m_ScaleFactor: 1 | ||||||
|  |   m_ReferenceResolution: {x: 1080, y: 2048} | ||||||
|  |   m_ScreenMatchMode: 0 | ||||||
|  |   m_MatchWidthOrHeight: 0 | ||||||
|  |   m_PhysicalUnit: 3 | ||||||
|  |   m_FallbackScreenDPI: 96 | ||||||
|  |   m_DefaultSpriteDPI: 96 | ||||||
|  |   m_DynamicPixelsPerUnit: 1 | ||||||
|  |   m_PresetInfoIsWorld: 0 | ||||||
|  | --- !u!114 &5150702561338006478 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702561338006473} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_IgnoreReversedGraphics: 1 | ||||||
|  |   m_BlockingObjects: 0 | ||||||
|  |   m_BlockingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  | --- !u!1 &5150702562168738940 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 5150702562168738941} | ||||||
|  |   - component: {fileID: 5150702562168738931} | ||||||
|  |   - component: {fileID: 5150702562168738930} | ||||||
|  |   - component: {fileID: 6987031650776014463} | ||||||
|  |   - component: {fileID: 5150702562168738928} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: ads_status_monitor | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &5150702562168738941 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562168738940} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 5150702562590427462} | ||||||
|  |   m_Father: {fileID: 5150702560827386906} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 1, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: -249, y: 378} | ||||||
|  |   m_SizeDelta: {x: 480, y: 320} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &5150702562168738931 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562168738940} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &5150702562168738930 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562168738940} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 0, g: 0, b: 0, a: 0.8627451} | ||||||
|  |   m_RaycastTarget: 1 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_Sprite: {fileID: 0} | ||||||
|  |   m_Type: 0 | ||||||
|  |   m_PreserveAspect: 0 | ||||||
|  |   m_FillCenter: 1 | ||||||
|  |   m_FillMethod: 4 | ||||||
|  |   m_FillAmount: 1 | ||||||
|  |   m_FillClockwise: 1 | ||||||
|  |   m_FillOrigin: 0 | ||||||
|  |   m_UseSpriteMesh: 0 | ||||||
|  |   m_PixelsPerUnitMultiplier: 1 | ||||||
|  | --- !u!225 &6987031650776014463 | ||||||
|  | CanvasGroup: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562168738940} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_Alpha: 0.8 | ||||||
|  |   m_Interactable: 1 | ||||||
|  |   m_BlocksRaycasts: 1 | ||||||
|  |   m_IgnoreParentGroups: 0 | ||||||
|  | --- !u!114 &5150702562168738928 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562168738940} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: ed7d7e0d6ce2048c1bacbd901b97c752, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   _canvasGroup: {fileID: 6987031650776014463} | ||||||
|  |   _txtInfo: {fileID: 5150702562590427463} | ||||||
|  | --- !u!1 &5150702562590427457 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 5150702562590427462} | ||||||
|  |   - component: {fileID: 5150702562590427460} | ||||||
|  |   - component: {fileID: 5150702562590427463} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: txt_info | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &5150702562590427462 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562590427457} | ||||||
|  |   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 5150702562168738941} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 1} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: -20, y: -20} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &5150702562590427460 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562590427457} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &5150702562590427463 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5150702562590427457} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_RaycastTarget: 0 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 0 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_FontData: | ||||||
|  |     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |     m_FontSize: 14 | ||||||
|  |     m_FontStyle: 0 | ||||||
|  |     m_BestFit: 1 | ||||||
|  |     m_MinSize: 10 | ||||||
|  |     m_MaxSize: 40 | ||||||
|  |     m_Alignment: 0 | ||||||
|  |     m_AlignByGeometry: 0 | ||||||
|  |     m_RichText: 1 | ||||||
|  |     m_HorizontalOverflow: 0 | ||||||
|  |     m_VerticalOverflow: 0 | ||||||
|  |     m_LineSpacing: 1 | ||||||
|  |   m_Text: '11111 | ||||||
|  | 
 | ||||||
|  |     22222 | ||||||
|  | 
 | ||||||
|  |     33333 | ||||||
|  | 
 | ||||||
|  |     44444 | ||||||
|  | 
 | ||||||
|  |     55555 | ||||||
|  | 
 | ||||||
|  |     66666' | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4332e3ea47cf5426c90ffcb6817292e6 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: f78334aec158543b2b8fc6157f69764b | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: be43df6b6918346819c7938339e0fb93 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,291 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |     using G = GlobalVars; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using System.Linq; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public class GuruDebugger | ||||||
|  |     { | ||||||
|  |         public const string Version = "1.0.0";     | ||||||
|  |         private static bool _initOnce = false; | ||||||
|  |         private static GuruDebugger _instance; | ||||||
|  |         public static GuruDebugger Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) | ||||||
|  |                 { | ||||||
|  |                     Init(); | ||||||
|  |                 } | ||||||
|  |                 return _instance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static event Action OnClosed | ||||||
|  |         { | ||||||
|  |             add | ||||||
|  |             { | ||||||
|  |                 if (_onViewClosed == null) | ||||||
|  |                 { | ||||||
|  |                     _onViewClosed = value; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     _onViewClosed += value; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             remove | ||||||
|  |             { | ||||||
|  |                 if (_onViewClosed != null) | ||||||
|  |                 { | ||||||
|  |                     _onViewClosed -= value; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private static Action _onViewClosed; | ||||||
|  | 
 | ||||||
|  |         private DebuggerViewRoot _viewRoot; | ||||||
|  |         private Dictionary<string, List<OptionLayout>> optionDicts; | ||||||
|  |         private string _curTabName; | ||||||
|  | 
 | ||||||
|  |         public static void Init() | ||||||
|  |         { | ||||||
|  |             if (_instance == null) _initOnce = false; | ||||||
|  | 
 | ||||||
|  |             if (_initOnce) return; | ||||||
|  |             _initOnce = true; | ||||||
|  |             _instance = new GuruDebugger(); | ||||||
|  |             _instance.StartService(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void StartService() | ||||||
|  |         { | ||||||
|  |             _viewRoot = DebuggerViewRoot.Instance; | ||||||
|  |             optionDicts = new Dictionary<string, List<OptionLayout>>(5); | ||||||
|  |             G.Events.OnUIEvent += OnUIEvent; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void OnUIEvent(string evt, object data) | ||||||
|  |         { | ||||||
|  |             switch (evt) | ||||||
|  |             { | ||||||
|  |                 case G.Events.EventTabClicked: | ||||||
|  |                     OnSelectTab(data.ToString()); | ||||||
|  |                     break; | ||||||
|  |                 case G.Events.EventViewClosed: | ||||||
|  |                     optionDicts?.Clear(); | ||||||
|  |                     _onViewClosed?.Invoke(); | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region UI Layout | ||||||
|  | 
 | ||||||
|  |         public OptionLayout AddOption(string uri, string content = "", Action clickHandler = null) | ||||||
|  |         { | ||||||
|  |             string tabName = G.Consts.DefaultTabName; | ||||||
|  |             string optName = G.Consts.DefaultOptionName; | ||||||
|  |             if (uri.Contains("/")) | ||||||
|  |             { | ||||||
|  |                 var names = uri.Split('/'); | ||||||
|  |                 if (names.Length > 0) | ||||||
|  |                 { | ||||||
|  |                     tabName = names[0]; | ||||||
|  |                 } | ||||||
|  |                 if(names.Length > 1) optName = names[1]; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!optionDicts.ContainsKey(tabName)) | ||||||
|  |             { | ||||||
|  |                 optionDicts[tabName] = new List<OptionLayout>(10); | ||||||
|  |             } | ||||||
|  |    | ||||||
|  |             OptionLayout opt = new OptionLayout(); | ||||||
|  |             opt.tabName = tabName; | ||||||
|  |             opt.optName = optName; | ||||||
|  |             opt.content = content; | ||||||
|  |             opt.selfClickHandler = clickHandler; | ||||||
|  | 
 | ||||||
|  |             AddOptionLayout(tabName, opt); | ||||||
|  |              | ||||||
|  |             return opt; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void AddOptionLayout(string tabName, OptionLayout layout) | ||||||
|  |         { | ||||||
|  |             if (!optionDicts.ContainsKey(tabName)) | ||||||
|  |             { | ||||||
|  |                 optionDicts[tabName] = new List<OptionLayout>(20); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             optionDicts[tabName].Add(layout); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void ShowPage(string tabName = "") | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(tabName)  | ||||||
|  |                 && optionDicts != null && optionDicts.Count > 0) | ||||||
|  |             { | ||||||
|  |                 tabName = optionDicts.Keys.First(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!string.IsNullOrEmpty(tabName)) | ||||||
|  |             { | ||||||
|  |                 RenderPage(tabName); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 渲染页面 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="tabName"></param> | ||||||
|  |         private void RenderPage(string tabName) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(tabName)) return; | ||||||
|  |              | ||||||
|  |             _viewRoot.Show(); | ||||||
|  |             _viewRoot.RefreshTabs(tabName, optionDicts.Keys.ToList()); | ||||||
|  |             _viewRoot.CleanOptions(); | ||||||
|  |             if (optionDicts.TryGetValue(tabName, out var opts)) | ||||||
|  |             { | ||||||
|  |                 OptionLayout ol; | ||||||
|  |                 UIOptionItem ui; | ||||||
|  |                 for (int i = 0; i < opts.Count; i++) | ||||||
|  |                 { | ||||||
|  |                     ol = opts[i]; | ||||||
|  |                     ui = _viewRoot.RegisterOption(ol.optName, ol.content); | ||||||
|  | 
 | ||||||
|  |                     if (ol.selfClickHandler != null) | ||||||
|  |                     { | ||||||
|  |                         var btnName = ol.content; | ||||||
|  |                         if (string.IsNullOrEmpty(btnName)) btnName = ol.optName; | ||||||
|  |                         var btn = _viewRoot.AddOptionButton(ui, btnName, ol.selfClickHandler); | ||||||
|  |                         ui.Clickable = true; | ||||||
|  |                         continue; | ||||||
|  |                     } | ||||||
|  |                      | ||||||
|  |                     foreach (var item in ol.items) | ||||||
|  |                     { | ||||||
|  |                         switch (item.type) | ||||||
|  |                         { | ||||||
|  |                             case "button": | ||||||
|  |                                 var btn = _viewRoot.AddOptionButton(ui, item.name, item.clickHandler); | ||||||
|  |                                 if (!item.size.Equals(Vector2.zero)) btn.Size = item.size; | ||||||
|  |                                 break; | ||||||
|  |                              | ||||||
|  |                             case "label": | ||||||
|  |                                 var lb = _viewRoot.AddOptionLabel(ui, item.name, item.align); | ||||||
|  |                                 if (!item.size.Equals(Vector2.zero)) lb.Size = item.size; | ||||||
|  |                                 break; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 Debug.LogError($"{tabName} not found!"); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void OnSelectTab(string tabName) | ||||||
|  |         { | ||||||
|  |             if (_curTabName == tabName) return; | ||||||
|  |             Instance.ShowPage(tabName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Display | ||||||
|  |          | ||||||
|  |         public static void Show(string tabName = "") | ||||||
|  |         { | ||||||
|  |             Instance.ShowPage(tabName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static void Hide() => Instance._viewRoot.Hide(); | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region DebuggerOption | ||||||
|  |          | ||||||
|  |         public class OptionLayout | ||||||
|  |         { | ||||||
|  |             public string optName; | ||||||
|  |             public string content; | ||||||
|  |             public string tabName; | ||||||
|  |             public Action selfClickHandler; | ||||||
|  | 
 | ||||||
|  |             internal List<OptionItemLayout> items; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             public OptionLayout() | ||||||
|  |             { | ||||||
|  |                 items = new List<OptionItemLayout>(10); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             public OptionLayout AddLabel(string labelName) | ||||||
|  |             { | ||||||
|  |                 items.Add(new OptionItemLayout() | ||||||
|  |                 { | ||||||
|  |                     name = labelName, | ||||||
|  |                     type = "label", | ||||||
|  |                 }); | ||||||
|  |                 return this; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             public OptionLayout AddButton(string btnName, Action onClick) | ||||||
|  |             { | ||||||
|  |                 items.Add(new OptionItemLayout() | ||||||
|  |                 { | ||||||
|  |                     name = btnName, | ||||||
|  |                     type = "button", | ||||||
|  |                     clickHandler = onClick | ||||||
|  |                 }); | ||||||
|  |                 return this; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         internal class OptionItemLayout | ||||||
|  |         { | ||||||
|  |             public string type; | ||||||
|  |             public Action clickHandler; | ||||||
|  |             public string name; | ||||||
|  |             public string content; | ||||||
|  |             public TextAnchor align = TextAnchor.MiddleCenter; | ||||||
|  |             public Vector2 size = Vector2.zero; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     public static class OptionLayoutExtension | ||||||
|  |     { | ||||||
|  |         public static GuruDebugger.OptionLayout AddCopyButton(this GuruDebugger.OptionLayout layout, Action onClick = null) | ||||||
|  |         { | ||||||
|  |             layout.AddButton("Copy", ()=> | ||||||
|  |             { | ||||||
|  |                 GUIUtility.systemCopyBuffer = layout.content; | ||||||
|  |                 onClick?.Invoke(); | ||||||
|  |             }); | ||||||
|  |             return layout; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: f5ccddaa61334c748afe7c39cf8e11b7 | ||||||
|  | timeCreated: 1711014134 | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  | 
 | ||||||
|  |     public static class GlobalVars | ||||||
|  |     { | ||||||
|  |          | ||||||
|  |         public class Events | ||||||
|  |         { | ||||||
|  |             public const string EventTabClicked  = "evt_tab_clicked"; | ||||||
|  |             public const string EventViewClosed  = "evt_view_closed"; | ||||||
|  | 
 | ||||||
|  |             public static Action<string, object> OnUIEvent = (e, o) => { }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         public class Consts | ||||||
|  |         { | ||||||
|  |             public const string DefaultTabName = "Tab"; | ||||||
|  |             public const string DefaultOptionName = "Opt"; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public class Colors | ||||||
|  |         { | ||||||
|  |             public static Color Gray = new Color(1,1,1, 0.12f); | ||||||
|  |             public static Color Gray2 = new Color(1,1,1, 0.036f); | ||||||
|  |             public static Color LightGreen = new Color(0.02f,1,1, 0.788f); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1f8d5969a496489eab759e7ff15a9cdc | ||||||
|  | timeCreated: 1711021436 | ||||||
|  | @ -0,0 +1,57 @@ | ||||||
|  | using System; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     public class UIComponent: MonoBehaviour | ||||||
|  |     { | ||||||
|  |          | ||||||
|  |         public virtual long GID { get; protected set; } | ||||||
|  |         public virtual string ID => $"{GID}"; | ||||||
|  |          | ||||||
|  |         public Transform Parent | ||||||
|  |         { | ||||||
|  |             get => transform.parent; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 transform.SetParent(value); | ||||||
|  |                 transform.localPosition = Vector3.zero; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector2 Size | ||||||
|  |         { | ||||||
|  |             get => _rectTransform.sizeDelta; | ||||||
|  |             set => _rectTransform.sizeDelta = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public bool Active | ||||||
|  |         { | ||||||
|  |             get => gameObject.activeSelf; | ||||||
|  |             set => gameObject.SetActive(value); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected RectTransform _rectTransform; | ||||||
|  |         private void Awake() | ||||||
|  |         { | ||||||
|  |             _rectTransform = gameObject.GetComponent<RectTransform>(); | ||||||
|  | 
 | ||||||
|  |             OnCreated(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected virtual void OnCreated() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 刷新UI | ||||||
|  |         /// </summary> | ||||||
|  |         public virtual void Refresh() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c65140f21e494b6fa50779248643af52 | ||||||
|  | timeCreated: 1711063080 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4351260f681b42d9851e353f24f3b05a | ||||||
|  | timeCreated: 1711018597 | ||||||
|  | @ -0,0 +1,221 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | using System.Collections.Generic; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using G = GlobalVars; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public partial class DebuggerViewRoot | ||||||
|  |     { | ||||||
|  |          | ||||||
|  |         [SerializeField] private UITabItem _tabPrefab; | ||||||
|  |         [SerializeField] private UIOptionItem _optPrefab; | ||||||
|  |         [SerializeField] private VButton _btnPrefab; | ||||||
|  |         [SerializeField] private VLabel _labelPrefab; | ||||||
|  |          | ||||||
|  |         private Queue<UITabItem> _tabPools; | ||||||
|  |         private Queue<UIOptionItem> _optPools; | ||||||
|  |          | ||||||
|  |         private List<UITabItem> _displayedTabs; | ||||||
|  |         private List<UIOptionItem> _displayedOptions; | ||||||
|  | 
 | ||||||
|  |         private long _tabIds = 0; | ||||||
|  |         private long _optIds = 0; | ||||||
|  |         private long _btnIds = 0; | ||||||
|  |         private long _lbIds = 0; | ||||||
|  | 
 | ||||||
|  |         private void InitFactory() | ||||||
|  |         { | ||||||
|  |             _tabPools = new Queue<UITabItem>(10); | ||||||
|  |             _optPools = new Queue<UIOptionItem>(20); | ||||||
|  | 
 | ||||||
|  |             _tabPrefab.Parent = _binNode; | ||||||
|  |             _optPrefab.Parent = _binNode; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             _displayedTabs = new List<UITabItem>(10); | ||||||
|  |             _displayedOptions = new List<UIOptionItem>(20); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #region Tabs | ||||||
|  |          | ||||||
|  |         public UITabItem RegisterTab(string tabNam) | ||||||
|  |         { | ||||||
|  |             var tab = GetTab(tabNam); | ||||||
|  |             _displayedTabs.Add(tab); | ||||||
|  |             return tab; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public UITabItem BuildTab(string tabName) | ||||||
|  |         { | ||||||
|  |             var go = Instantiate(_tabPrefab.gameObject, _tabContent); | ||||||
|  |             go.SetActive(true); | ||||||
|  |             var tab = go.GetComponent<UITabItem>(); | ||||||
|  |             tab.InitWithData(_tabIds, tabName); | ||||||
|  |             tab.OnRecycle = OnTabRecycle; | ||||||
|  |             tab.OnClicked = OnTabClicked; | ||||||
|  |             _tabIds++; | ||||||
|  |             return tab; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnTabClicked(string tabName) | ||||||
|  |         { | ||||||
|  |             G.Events.OnUIEvent?.Invoke(G.Events.EventTabClicked, tabName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnTabRecycle(UITabItem tab) | ||||||
|  |         { | ||||||
|  |             _displayedTabs.Remove(tab); | ||||||
|  |             tab.Parent = _binNode; | ||||||
|  |             tab.transform.localPosition = Vector3.zero; | ||||||
|  |             _tabPools.Enqueue(tab); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private UITabItem GetTab(string tabName) | ||||||
|  |         { | ||||||
|  |             if (_tabPools.Count > 0) | ||||||
|  |             { | ||||||
|  |                 var tab = _tabPools.Dequeue(); | ||||||
|  |                 tab.Label = tabName; | ||||||
|  |                 tab.Parent = _tabContent; | ||||||
|  |                 return tab; | ||||||
|  |             } | ||||||
|  |             return BuildTab(tabName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Options | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public UIOptionItem RegisterOption(string optName, string content = "") | ||||||
|  |         { | ||||||
|  |             var opt = GetOption(optName); | ||||||
|  |             opt.Content = content; | ||||||
|  |             opt.Refresh(); | ||||||
|  |             _displayedOptions.Add(opt); | ||||||
|  |             return opt; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public UIOptionItem BuildOption(string optName) | ||||||
|  |         { | ||||||
|  |             var go = Instantiate(_optPrefab.gameObject, _optContent); | ||||||
|  |             go.SetActive(true); | ||||||
|  |             var opt = go.GetComponent<UIOptionItem>(); | ||||||
|  |             opt.InitWithData(_optIds, optName); | ||||||
|  |             opt.OnRecycle = OnOptionRecycle; | ||||||
|  |             _optIds++; | ||||||
|  |             return opt; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         private UIOptionItem GetOption(string name) | ||||||
|  |         { | ||||||
|  |             if (_optPools.Count > 0) | ||||||
|  |             { | ||||||
|  |                 var opt = _optPools.Dequeue(); | ||||||
|  |                 opt.Label = name; | ||||||
|  |                 opt.Parent = _optContent; | ||||||
|  |                 return opt; | ||||||
|  |             } | ||||||
|  |             return BuildOption(name); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 选项回收 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="opt"></param> | ||||||
|  |         private void OnOptionRecycle(UIOptionItem opt) | ||||||
|  |         { | ||||||
|  |             _displayedOptions.Remove(opt);    | ||||||
|  |             opt.Parent = _binNode; | ||||||
|  |             opt.transform.localPosition = Vector3.zero; | ||||||
|  |             _optPools.Enqueue(opt); | ||||||
|  |         } | ||||||
|  |        | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region Button | ||||||
|  | 
 | ||||||
|  |         public VButton BuildButton(string name, Action onClick, Transform parent) | ||||||
|  |         { | ||||||
|  |             var go = Instantiate(_btnPrefab.gameObject, parent); | ||||||
|  |             var btn = go.GetComponent<VButton>(); | ||||||
|  |             btn.Label = name; | ||||||
|  |             btn.OnClicked = onClick; | ||||||
|  |             btn.Size = new Vector2(120, 0); | ||||||
|  |             return btn; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #region 添加组件 | ||||||
|  | 
 | ||||||
|  |         internal VButton AddOptionButton(UIOptionItem option, string btnName, Action btnHandler) | ||||||
|  |         { | ||||||
|  |             var btn = BuildButton(btnName, btnHandler, option.Root); | ||||||
|  |             option.AddChild(btn.gameObject); | ||||||
|  |             return btn; | ||||||
|  |         } | ||||||
|  |         internal VLabel AddOptionLabel(UIOptionItem option, string label, TextAnchor align = TextAnchor.MiddleCenter) | ||||||
|  |         { | ||||||
|  |             var lb = BuildLabel(label, align, option.Root); | ||||||
|  |             option.AddChild(lb.gameObject); | ||||||
|  |             return lb; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region Label | ||||||
|  | 
 | ||||||
|  |         public VLabel BuildLabel(string lbName, TextAnchor align, Transform parent) | ||||||
|  |         { | ||||||
|  |             var go = Instantiate(_labelPrefab.gameObject, parent); | ||||||
|  |             go.name = lbName; | ||||||
|  |             var label = go.GetComponent<VLabel>(); | ||||||
|  |             label.Text = lbName; | ||||||
|  |             label.Align = align; | ||||||
|  |             label.Size = new Vector2(300, 0); | ||||||
|  |             return label; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Recycle | ||||||
|  |          | ||||||
|  |         internal void CleanTabs() | ||||||
|  |         { | ||||||
|  |             while (_displayedTabs.Count > 0) | ||||||
|  |             { | ||||||
|  |                 var tab = _displayedTabs[0]; | ||||||
|  |                 tab.Dispose(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         internal void CleanOptions() | ||||||
|  |         { | ||||||
|  |             while (_displayedOptions.Count > 0) | ||||||
|  |             { | ||||||
|  |                 var opt = _displayedOptions[0]; | ||||||
|  |                 opt.Dispose(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 3a8636631ec74eeea6dff03bdc79c03c | ||||||
|  | timeCreated: 1711026127 | ||||||
|  | @ -0,0 +1,151 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | using UnityEngine.EventSystems; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |     using G = GlobalVars; | ||||||
|  |      | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |      | ||||||
|  |     public partial class DebuggerViewRoot: UIComponent, IViewFactory, IWidgetFactory | ||||||
|  |     { | ||||||
|  |         [SerializeField] private Canvas _canvas; | ||||||
|  |         [SerializeField] private CanvasGroup _canvasGroup; | ||||||
|  | 
 | ||||||
|  |         [SerializeField] private RectTransform _tabContent; | ||||||
|  |         [SerializeField] private RectTransform _optContent; | ||||||
|  |         [SerializeField] private RectTransform _binNode; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         [SerializeField] private Button _btnClose; | ||||||
|  |          | ||||||
|  |         private const string PrefabPath = "ui/debugger_root"; | ||||||
|  |         private const string InstanceName = "__debugger__"; | ||||||
|  |          | ||||||
|  |         private static DebuggerViewRoot _instance; | ||||||
|  |         public static DebuggerViewRoot Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) _instance = CreateInstance(); | ||||||
|  |                 return _instance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private EventSystem _eventSystem; | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #region Static Calls | ||||||
|  | 
 | ||||||
|  |         private static DebuggerViewRoot CreateInstance() | ||||||
|  |         { | ||||||
|  |             var p = Resources.Load<GameObject>(PrefabPath); | ||||||
|  |             if (p != null) | ||||||
|  |             { | ||||||
|  |                 var go = Instantiate(p); | ||||||
|  |                 DontDestroyOnLoad(go); | ||||||
|  |                 go.name = InstanceName; | ||||||
|  |                 return go.GetComponent<DebuggerViewRoot>(); | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Initialization | ||||||
|  | 
 | ||||||
|  |         private void Awake() | ||||||
|  |         { | ||||||
|  |             Init(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void Init() | ||||||
|  |         { | ||||||
|  |             InitFactory(); | ||||||
|  |              | ||||||
|  |             _btnClose.onClick.AddListener(OnCloseBtnEvent); | ||||||
|  | 
 | ||||||
|  |             if (EventSystem.current == null) | ||||||
|  |             { | ||||||
|  |                 SetupEventSystem(); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 _eventSystem = EventSystem.current; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             Hide(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void SetupEventSystem() | ||||||
|  |         { | ||||||
|  | 
 | ||||||
|  |             var go = new GameObject(nameof(EventSystem)); | ||||||
|  |             var es = go.AddComponent<EventSystem>(); | ||||||
|  |             go.AddComponent<StandaloneInputModule>(); | ||||||
|  |             es.transform.parent = transform; | ||||||
|  |             _eventSystem = es; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnCloseBtnEvent() | ||||||
|  |         { | ||||||
|  |             Hide(); | ||||||
|  |             OnSelfClosed(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region Display | ||||||
|  |          | ||||||
|  |         public void Show() => Active = true; | ||||||
|  |         public void Hide() => Active = false; | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Pages | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         internal void RefreshTabs(string tanName, List<string> tabs = null) | ||||||
|  |         { | ||||||
|  |             if (tabs == null) | ||||||
|  |             { | ||||||
|  |                 tabs = new List<string>(_displayedTabs.Count); | ||||||
|  |                 foreach (var t in _displayedTabs) | ||||||
|  |                 { | ||||||
|  |                     tabs.Add(t.Label); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             CleanTabs(); | ||||||
|  |             foreach (var tn in tabs) | ||||||
|  |             { | ||||||
|  |                 var tab = RegisterTab(tn); | ||||||
|  |                 tab.Selected = tn == tanName; | ||||||
|  |                 tab.OnClicked = OnTabClicked; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Dispos | ||||||
|  | 
 | ||||||
|  |         private void OnSelfClosed() | ||||||
|  |         { | ||||||
|  |             CleanTabs(); | ||||||
|  |             CleanOptions(); | ||||||
|  |             G.Events.OnUIEvent?.Invoke(G.Events.EventViewClosed, null); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 128174e534964447a73e381ca1fadd0f | ||||||
|  | timeCreated: 1711018610 | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public interface IViewFactory | ||||||
|  |     { | ||||||
|  |         UITabItem BuildTab(string tabName); | ||||||
|  |         UIOptionItem BuildOption(string optName); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public interface IWidgetFactory  | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         VButton BuildButton(string name, Action onClick, Transform parent); | ||||||
|  |         VLabel BuildLabel(string lbName, TextAnchor align, Transform parent); | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d783b7f8e37f48f3bc36e2877c6143b3 | ||||||
|  | timeCreated: 1711025708 | ||||||
|  | @ -0,0 +1,114 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |      | ||||||
|  |     public class UIOptionItem: UIComponent | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         [SerializeField] private RectTransform _root; | ||||||
|  |         [SerializeField] private VLabel _label; | ||||||
|  |         [SerializeField] private VLabel _content; | ||||||
|  |         [SerializeField] private Image _bgImage; | ||||||
|  | 
 | ||||||
|  |         public Action<UIOptionItem> OnRecycle; | ||||||
|  |         private List<GameObject> _children; | ||||||
|  | 
 | ||||||
|  |         public Transform Root => _root; | ||||||
|  |          | ||||||
|  |         public string Label | ||||||
|  |         { | ||||||
|  |             get => _label.Text; | ||||||
|  |             set => _label.Text = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public string Content | ||||||
|  |         { | ||||||
|  |             get => _content.Text; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _content.Text = value; | ||||||
|  |                 _content.Active = !string.IsNullOrEmpty(value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private bool _clickable = false; | ||||||
|  |         public bool Clickable | ||||||
|  |         { | ||||||
|  |             get => _clickable; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _clickable = value; | ||||||
|  |                 _label.Active = !_clickable; | ||||||
|  |                 _content.Active = !_clickable; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void InitWithData(long gid, string optName = "") | ||||||
|  |         { | ||||||
|  |             GID = gid; | ||||||
|  |             name = $"opt_{gid}"; | ||||||
|  |             _children = new List<GameObject>(10); | ||||||
|  | 
 | ||||||
|  |             if (string.IsNullOrEmpty(optName)) | ||||||
|  |             { | ||||||
|  |                 _label.Active = false; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 Label = optName; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             _label.Align = TextAnchor.MiddleLeft; | ||||||
|  |             _content.Align = TextAnchor.MiddleLeft; | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void Dispose() | ||||||
|  |         { | ||||||
|  |             Clickable = false; | ||||||
|  |             ClearChildren(); | ||||||
|  |             OnRecycle?.Invoke(this); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void ClearChildren() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |             if(_children != null && _children.Count > 0) | ||||||
|  |             { | ||||||
|  |                 foreach (var child in _children) | ||||||
|  |                 { | ||||||
|  |                     Destroy(child); | ||||||
|  |                 } | ||||||
|  |                 _children.Clear(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void AddChild(GameObject obj) | ||||||
|  |         { | ||||||
|  |             _children.Add(obj); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public override void Refresh() | ||||||
|  |         { | ||||||
|  |             var idx = transform.GetSiblingIndex(); | ||||||
|  |             _bgImage.color = idx % 2 == 0 ? GlobalVars.Colors.Gray : GlobalVars.Colors.Gray2; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 8010bd3b4bfd4274997d438a1d99ae19 | ||||||
|  | timeCreated: 1711024532 | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |     using G = GlobalVars; | ||||||
|  |      | ||||||
|  |     public class UITabItem: UIComponent | ||||||
|  |     { | ||||||
|  |         [SerializeField] private VButton _btn; | ||||||
|  | 
 | ||||||
|  |         private string _label; | ||||||
|  |         public string Label | ||||||
|  |         { | ||||||
|  |             get => _label; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _label = value; | ||||||
|  |                 _btn.Label = value; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private bool _selected = false; | ||||||
|  | 
 | ||||||
|  |         public bool Selected | ||||||
|  |         { | ||||||
|  |             get => _selected; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _selected = value; | ||||||
|  |                 Refresh(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         public Action<string> OnClicked; | ||||||
|  |         public Action<UITabItem> OnRecycle; | ||||||
|  | 
 | ||||||
|  |         #region Init | ||||||
|  | 
 | ||||||
|  |         protected override void OnCreated() | ||||||
|  |         { | ||||||
|  |             _btn.OnClicked = OnTabClickedEvent; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void OnTabClickedEvent() | ||||||
|  |         { | ||||||
|  |             Selected = !Selected; | ||||||
|  |             OnClicked?.Invoke(_label); | ||||||
|  |             Refresh(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void InitWithData(long gid, string label = "") | ||||||
|  |         { | ||||||
|  |             GID = gid; | ||||||
|  |             name = $"tab_{GID}"; | ||||||
|  |             _btn.name = "_btn"; | ||||||
|  | 
 | ||||||
|  |             if (!string.IsNullOrEmpty(label)) | ||||||
|  |             { | ||||||
|  |                 Label = label; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region UI | ||||||
|  | 
 | ||||||
|  |         public override void Refresh() | ||||||
|  |         { | ||||||
|  |             _btn.Color = Selected? G.Colors.LightGreen: G.Colors.Gray; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Recycle | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public void Dispose() | ||||||
|  |         { | ||||||
|  |             OnClicked = null; | ||||||
|  |             OnRecycle?.Invoke(this); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 74db3f6a69ff47f0880e1250393e6f7f | ||||||
|  | timeCreated: 1711020325 | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  | 
 | ||||||
|  |     public class VButton: UIComponent | ||||||
|  |     { | ||||||
|  |         [SerializeField] private Image _image; | ||||||
|  |         [SerializeField] private Text _label; | ||||||
|  |         [SerializeField] private Button _button; | ||||||
|  |          | ||||||
|  |         public string Label | ||||||
|  |         { | ||||||
|  |             get => _label.text; | ||||||
|  |             set => _label.text = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public Action OnClicked; | ||||||
|  |          | ||||||
|  |         public Color Color | ||||||
|  |         { | ||||||
|  |             get => _image.color; | ||||||
|  |             set => _image.color = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public Color LabelColor | ||||||
|  |         { | ||||||
|  |             get => _label.color; | ||||||
|  |             set => _label.color = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         protected override void OnCreated() | ||||||
|  |         { | ||||||
|  |             _button.onClick.AddListener(OnSelfClicked); | ||||||
|  |         } | ||||||
|  |         private void OnSelfClicked() | ||||||
|  |         { | ||||||
|  |             OnClicked?.Invoke(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: cd788ac6ee4f4afe9d57738d49a3fdc4 | ||||||
|  | timeCreated: 1711020763 | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Guru.Debugger | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |      | ||||||
|  |     public class VLabel : UIComponent | ||||||
|  |     { | ||||||
|  |         [SerializeField] private Text _label; | ||||||
|  |         public string Text | ||||||
|  |         { | ||||||
|  |             get => _label.text; | ||||||
|  |             set => _label.text = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public Color Color | ||||||
|  |         { | ||||||
|  |             get => _label.color; | ||||||
|  |             set => _label.color = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private TextAnchor _align; | ||||||
|  |         public TextAnchor Align | ||||||
|  |         { | ||||||
|  |             get => _align; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _align = value; | ||||||
|  |                 _label.alignment = _align; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e85702df90d74eb4892a7a742bcb0f05 | ||||||
|  | timeCreated: 1711026040 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 47c2a153e811d49d1b9680abd08382f7 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,206 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &5161587445136557863 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 148257080420939497} | ||||||
|  |   - component: {fileID: 1727577413956784551} | ||||||
|  |   - component: {fileID: 2268706270294319084} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: label | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &148257080420939497 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 1939155628914972370} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0.5, y: 0.5} | ||||||
|  |   m_AnchorMax: {x: 0.5, y: 0.5} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 100, y: 100} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &1727577413956784551 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &2268706270294319084 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_RaycastTarget: 0 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_FontData: | ||||||
|  |     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |     m_FontSize: 14 | ||||||
|  |     m_FontStyle: 0 | ||||||
|  |     m_BestFit: 1 | ||||||
|  |     m_MinSize: 10 | ||||||
|  |     m_MaxSize: 40 | ||||||
|  |     m_Alignment: 4 | ||||||
|  |     m_AlignByGeometry: 0 | ||||||
|  |     m_RichText: 1 | ||||||
|  |     m_HorizontalOverflow: 0 | ||||||
|  |     m_VerticalOverflow: 0 | ||||||
|  |     m_LineSpacing: 1 | ||||||
|  |   m_Text: INFO | ||||||
|  | --- !u!1 &8854415019278044657 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1939155628914972370} | ||||||
|  |   - component: {fileID: 7097619541680742948} | ||||||
|  |   - component: {fileID: 3799638908809225334} | ||||||
|  |   - component: {fileID: 7483045806784872229} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: btn_item | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &1939155628914972370 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 148257080420939497} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 100, y: 50} | ||||||
|  |   m_SizeDelta: {x: 200, y: 100} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &7097619541680742948 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &3799638908809225334 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 0.078431375, g: 1, b: 0.78765476, a: 0.5372549} | ||||||
|  |   m_RaycastTarget: 1 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_Sprite: {fileID: 0} | ||||||
|  |   m_Type: 0 | ||||||
|  |   m_PreserveAspect: 0 | ||||||
|  |   m_FillCenter: 1 | ||||||
|  |   m_FillMethod: 4 | ||||||
|  |   m_FillAmount: 1 | ||||||
|  |   m_FillClockwise: 1 | ||||||
|  |   m_FillOrigin: 0 | ||||||
|  |   m_UseSpriteMesh: 0 | ||||||
|  |   m_PixelsPerUnitMultiplier: 1 | ||||||
|  | --- !u!114 &7483045806784872229 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Navigation: | ||||||
|  |     m_Mode: 3 | ||||||
|  |     m_WrapAround: 0 | ||||||
|  |     m_SelectOnUp: {fileID: 0} | ||||||
|  |     m_SelectOnDown: {fileID: 0} | ||||||
|  |     m_SelectOnLeft: {fileID: 0} | ||||||
|  |     m_SelectOnRight: {fileID: 0} | ||||||
|  |   m_Transition: 1 | ||||||
|  |   m_Colors: | ||||||
|  |     m_NormalColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||||||
|  |     m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} | ||||||
|  |     m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||||||
|  |     m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} | ||||||
|  |     m_ColorMultiplier: 1 | ||||||
|  |     m_FadeDuration: 0.1 | ||||||
|  |   m_SpriteState: | ||||||
|  |     m_HighlightedSprite: {fileID: 0} | ||||||
|  |     m_PressedSprite: {fileID: 0} | ||||||
|  |     m_SelectedSprite: {fileID: 0} | ||||||
|  |     m_DisabledSprite: {fileID: 0} | ||||||
|  |   m_AnimationTriggers: | ||||||
|  |     m_NormalTrigger: Normal | ||||||
|  |     m_HighlightedTrigger: Highlighted | ||||||
|  |     m_PressedTrigger: Pressed | ||||||
|  |     m_SelectedTrigger: Selected | ||||||
|  |     m_DisabledTrigger: Disabled | ||||||
|  |   m_Interactable: 1 | ||||||
|  |   m_TargetGraphic: {fileID: 3799638908809225334} | ||||||
|  |   m_OnClick: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   _image: {fileID: 0} | ||||||
|  |   _label: {fileID: 0} | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c84e57ed527f24e6ab91e1cf45aa6ca4 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,391 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &2528333701503730058 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 695922022511621486} | ||||||
|  |   - component: {fileID: 412087832265673011} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: root | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &695922022511621486 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2528333701503730058} | ||||||
|  |   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 629926880474666585} | ||||||
|  |   - {fileID: 7248743696833887442} | ||||||
|  |   m_Father: {fileID: 4102609491836130493} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 1} | ||||||
|  |   m_AnchoredPosition: {x: 10, y: 0} | ||||||
|  |   m_SizeDelta: {x: -20, y: -20} | ||||||
|  |   m_Pivot: {x: 0, y: 0.5} | ||||||
|  | --- !u!114 &412087832265673011 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2528333701503730058} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Padding: | ||||||
|  |     m_Left: 0 | ||||||
|  |     m_Right: 0 | ||||||
|  |     m_Top: 0 | ||||||
|  |     m_Bottom: 0 | ||||||
|  |   m_ChildAlignment: 3 | ||||||
|  |   m_Spacing: 6 | ||||||
|  |   m_ChildForceExpandWidth: 1 | ||||||
|  |   m_ChildForceExpandHeight: 1 | ||||||
|  |   m_ChildControlWidth: 1 | ||||||
|  |   m_ChildControlHeight: 1 | ||||||
|  |   m_ChildScaleWidth: 0 | ||||||
|  |   m_ChildScaleHeight: 0 | ||||||
|  |   m_ReverseArrangement: 0 | ||||||
|  | --- !u!1 &4102609491836130490 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 4102609491836130493} | ||||||
|  |   - component: {fileID: 4102609491836130495} | ||||||
|  |   - component: {fileID: 4102609491836130492} | ||||||
|  |   - component: {fileID: 6345045228542041246} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: opt_node_item | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &4102609491836130493 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4102609491836130490} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 695922022511621486} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 160} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &4102609491836130495 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4102609491836130490} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &4102609491836130492 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4102609491836130490} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} | ||||||
|  |   m_RaycastTarget: 1 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_Sprite: {fileID: 0} | ||||||
|  |   m_Type: 0 | ||||||
|  |   m_PreserveAspect: 0 | ||||||
|  |   m_FillCenter: 1 | ||||||
|  |   m_FillMethod: 4 | ||||||
|  |   m_FillAmount: 1 | ||||||
|  |   m_FillClockwise: 1 | ||||||
|  |   m_FillOrigin: 0 | ||||||
|  |   m_UseSpriteMesh: 0 | ||||||
|  |   m_PixelsPerUnitMultiplier: 1 | ||||||
|  | --- !u!114 &6345045228542041246 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4102609491836130490} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 8010bd3b4bfd4274997d438a1d99ae19, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   _root: {fileID: 695922022511621486} | ||||||
|  |   _label: {fileID: 2993293849972821997} | ||||||
|  |   _content: {fileID: 5021256505751954790} | ||||||
|  |   _bgImage: {fileID: 4102609491836130492} | ||||||
|  | --- !u!1001 &83327412588764366 | ||||||
|  | PrefabInstance: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 695922022511621486} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: 2277169281067990379, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: _content | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 4704551826277804405, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Text | ||||||
|  |       value: Content | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Pivot.x | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Pivot.y | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  | --- !u!114 &5021256505751954790 stripped | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 4937950594306488744, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 83327412588764366} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 0} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | --- !u!224 &7248743696833887442 stripped | ||||||
|  | RectTransform: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 83327412588764366} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  | --- !u!1001 &7858023797254583877 | ||||||
|  | PrefabInstance: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 695922022511621486} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: 2277169281067990379, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: _label | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Pivot.x | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_Pivot.y | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  | --- !u!224 &629926880474666585 stripped | ||||||
|  | RectTransform: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 7858023797254583877} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  | --- !u!114 &2993293849972821997 stripped | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 4937950594306488744, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 7858023797254583877} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 0} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: db9336d7824134e1cb737eb3ba4c9d93 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,174 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &7844578585297590383 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 7844578585297590382} | ||||||
|  |   - component: {fileID: 7844578585297590376} | ||||||
|  |   - component: {fileID: 3730802781450377123} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: tab_node_item | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &7844578585297590382 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 7844578585297590383} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 8727470446105646736} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 200, y: 80} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &7844578585297590376 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 7844578585297590383} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &3730802781450377123 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 7844578585297590383} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 74db3f6a69ff47f0880e1250393e6f7f, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   _btn: {fileID: 301294120361967463} | ||||||
|  | --- !u!1001 &7203357951589204034 | ||||||
|  | PrefabInstance: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 7844578585297590382} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_Pivot.x | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_Pivot.y | ||||||
|  |       value: 0.5 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 200 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.y | ||||||
|  |       value: 100 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 100 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 50 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 8854415019278044657, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: v_btn | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  | --- !u!224 &8727470446105646736 stripped | ||||||
|  | RectTransform: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 7203357951589204034} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  | --- !u!114 &301294120361967463 stripped | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 7483045806784872229, guid: d0b72a82a22a748f89a2896a633bad10, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 7203357951589204034} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 0} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e22e7dc3c05a644c08c833a3a2f42a16 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,233 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &5161587445136557863 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 148257080420939497} | ||||||
|  |   - component: {fileID: 1727577413956784551} | ||||||
|  |   - component: {fileID: 2268706270294319084} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: label | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &148257080420939497 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 1939155628914972370} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 1} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 0} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &1727577413956784551 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &2268706270294319084 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 5161587445136557863} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_RaycastTarget: 0 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_FontData: | ||||||
|  |     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |     m_FontSize: 14 | ||||||
|  |     m_FontStyle: 0 | ||||||
|  |     m_BestFit: 1 | ||||||
|  |     m_MinSize: 10 | ||||||
|  |     m_MaxSize: 32 | ||||||
|  |     m_Alignment: 4 | ||||||
|  |     m_AlignByGeometry: 0 | ||||||
|  |     m_RichText: 1 | ||||||
|  |     m_HorizontalOverflow: 0 | ||||||
|  |     m_VerticalOverflow: 0 | ||||||
|  |     m_LineSpacing: 1 | ||||||
|  |   m_Text: INFO | ||||||
|  | --- !u!1 &8854415019278044657 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1939155628914972370} | ||||||
|  |   - component: {fileID: 7097619541680742948} | ||||||
|  |   - component: {fileID: 3799638908809225334} | ||||||
|  |   - component: {fileID: 8622626705591949948} | ||||||
|  |   - component: {fileID: 7483045806784872229} | ||||||
|  |   - component: {fileID: 5027051285820548675} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: v_btn | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &1939155628914972370 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 148257080420939497} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 100, y: 50} | ||||||
|  |   m_SizeDelta: {x: 200, y: 100} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &7097619541680742948 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &3799638908809225334 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 0.15686275} | ||||||
|  |   m_RaycastTarget: 1 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_Sprite: {fileID: 0} | ||||||
|  |   m_Type: 0 | ||||||
|  |   m_PreserveAspect: 0 | ||||||
|  |   m_FillCenter: 1 | ||||||
|  |   m_FillMethod: 4 | ||||||
|  |   m_FillAmount: 1 | ||||||
|  |   m_FillClockwise: 1 | ||||||
|  |   m_FillOrigin: 0 | ||||||
|  |   m_UseSpriteMesh: 0 | ||||||
|  |   m_PixelsPerUnitMultiplier: 1 | ||||||
|  | --- !u!114 &8622626705591949948 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Navigation: | ||||||
|  |     m_Mode: 3 | ||||||
|  |     m_WrapAround: 0 | ||||||
|  |     m_SelectOnUp: {fileID: 0} | ||||||
|  |     m_SelectOnDown: {fileID: 0} | ||||||
|  |     m_SelectOnLeft: {fileID: 0} | ||||||
|  |     m_SelectOnRight: {fileID: 0} | ||||||
|  |   m_Transition: 1 | ||||||
|  |   m_Colors: | ||||||
|  |     m_NormalColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||||||
|  |     m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} | ||||||
|  |     m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||||||
|  |     m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} | ||||||
|  |     m_ColorMultiplier: 1 | ||||||
|  |     m_FadeDuration: 0.1 | ||||||
|  |   m_SpriteState: | ||||||
|  |     m_HighlightedSprite: {fileID: 0} | ||||||
|  |     m_PressedSprite: {fileID: 0} | ||||||
|  |     m_SelectedSprite: {fileID: 0} | ||||||
|  |     m_DisabledSprite: {fileID: 0} | ||||||
|  |   m_AnimationTriggers: | ||||||
|  |     m_NormalTrigger: Normal | ||||||
|  |     m_HighlightedTrigger: Highlighted | ||||||
|  |     m_PressedTrigger: Pressed | ||||||
|  |     m_SelectedTrigger: Selected | ||||||
|  |     m_DisabledTrigger: Disabled | ||||||
|  |   m_Interactable: 1 | ||||||
|  |   m_TargetGraphic: {fileID: 3799638908809225334} | ||||||
|  |   m_OnClick: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  | --- !u!114 &7483045806784872229 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   _image: {fileID: 3799638908809225334} | ||||||
|  |   _label: {fileID: 2268706270294319084} | ||||||
|  |   _button: {fileID: 8622626705591949948} | ||||||
|  | --- !u!225 &5027051285820548675 | ||||||
|  | CanvasGroup: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 8854415019278044657} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_Alpha: 1 | ||||||
|  |   m_Interactable: 1 | ||||||
|  |   m_BlocksRaycasts: 1 | ||||||
|  |   m_IgnoreParentGroups: 0 | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d0b72a82a22a748f89a2896a633bad10 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,133 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &2277169281067990379 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 7327563488862494748} | ||||||
|  |   - component: {fileID: 4937950594306488744} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: v_label | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &7327563488862494748 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2277169281067990379} | ||||||
|  |   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: | ||||||
|  |   - {fileID: 6542213729106578396} | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 160, y: 100} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!114 &4937950594306488744 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2277169281067990379} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   _label: {fileID: 4704551826277804405} | ||||||
|  | --- !u!1 &9037852253254046115 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 6542213729106578396} | ||||||
|  |   - component: {fileID: 3463804050856076278} | ||||||
|  |   - component: {fileID: 4704551826277804405} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: text | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &6542213729106578396 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 9037852253254046115} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 7327563488862494748} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 1, y: 1} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 0} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!222 &3463804050856076278 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 9037852253254046115} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!114 &4704551826277804405 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 9037852253254046115} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_RaycastTarget: 0 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_FontData: | ||||||
|  |     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |     m_FontSize: 14 | ||||||
|  |     m_FontStyle: 0 | ||||||
|  |     m_BestFit: 1 | ||||||
|  |     m_MinSize: 10 | ||||||
|  |     m_MaxSize: 32 | ||||||
|  |     m_Alignment: 4 | ||||||
|  |     m_AlignByGeometry: 0 | ||||||
|  |     m_RichText: 1 | ||||||
|  |     m_HorizontalOverflow: 0 | ||||||
|  |     m_VerticalOverflow: 0 | ||||||
|  |     m_LineSpacing: 1 | ||||||
|  |   m_Text: Name | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4557ac9378ce94fd38269da8f9aa86e3 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 0ebe768b61d1d4fa782e856b6bca6eff | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 5c11309f0c00147efabb99ad473fa760 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 346f45e927caa428a96dfb925af7ceeb | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c72ccdd308b4438e84ba71a4bc049aff | ||||||
|  | timeCreated: 1711037647 | ||||||
|  | @ -0,0 +1,25 @@ | ||||||
|  | 
 | ||||||
|  | using Guru; | ||||||
|  | using Guru.Debugger; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | public class DebugDemo : MonoBehaviour | ||||||
|  | { | ||||||
|  |     // Start is called before the first frame update | ||||||
|  |     void Start() | ||||||
|  |     { | ||||||
|  |         GuruDebugger.Init(); | ||||||
|  | 
 | ||||||
|  |         GuruDebugger.Instance.AddOption("INFO/page1", "DebugDemo") | ||||||
|  |             .AddButton("AAA", () => | ||||||
|  |             { | ||||||
|  |                 Debug.Log("AAA"); | ||||||
|  |             }) | ||||||
|  |             .AddLabel("Test"); | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         GuruDebugger.Show(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: ea03c9090000940e3a5ae500d9d918bc | ||||||
|  | MonoImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   defaultReferences: [] | ||||||
|  |   executionOrder: 0 | ||||||
|  |   icon: {instanceID: 0} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,509 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!29 &1 | ||||||
|  | OcclusionCullingSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_OcclusionBakeSettings: | ||||||
|  |     smallestOccluder: 5 | ||||||
|  |     smallestHole: 0.25 | ||||||
|  |     backfaceThreshold: 100 | ||||||
|  |   m_SceneGUID: 00000000000000000000000000000000 | ||||||
|  |   m_OcclusionCullingData: {fileID: 0} | ||||||
|  | --- !u!104 &2 | ||||||
|  | RenderSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 9 | ||||||
|  |   m_Fog: 0 | ||||||
|  |   m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} | ||||||
|  |   m_FogMode: 3 | ||||||
|  |   m_FogDensity: 0.01 | ||||||
|  |   m_LinearFogStart: 0 | ||||||
|  |   m_LinearFogEnd: 300 | ||||||
|  |   m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} | ||||||
|  |   m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} | ||||||
|  |   m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} | ||||||
|  |   m_AmbientIntensity: 1 | ||||||
|  |   m_AmbientMode: 0 | ||||||
|  |   m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} | ||||||
|  |   m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} | ||||||
|  |   m_HaloStrength: 0.5 | ||||||
|  |   m_FlareStrength: 1 | ||||||
|  |   m_FlareFadeSpeed: 3 | ||||||
|  |   m_HaloTexture: {fileID: 0} | ||||||
|  |   m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |   m_DefaultReflectionMode: 0 | ||||||
|  |   m_DefaultReflectionResolution: 128 | ||||||
|  |   m_ReflectionBounces: 1 | ||||||
|  |   m_ReflectionIntensity: 1 | ||||||
|  |   m_CustomReflection: {fileID: 0} | ||||||
|  |   m_Sun: {fileID: 0} | ||||||
|  |   m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641275, b: 0.5748172, a: 1} | ||||||
|  |   m_UseRadianceAmbientProbe: 0 | ||||||
|  | --- !u!157 &3 | ||||||
|  | LightmapSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   m_GIWorkflowMode: 1 | ||||||
|  |   m_GISettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_BounceScale: 1 | ||||||
|  |     m_IndirectOutputScale: 1 | ||||||
|  |     m_AlbedoBoost: 1 | ||||||
|  |     m_EnvironmentLightingMode: 0 | ||||||
|  |     m_EnableBakedLightmaps: 1 | ||||||
|  |     m_EnableRealtimeLightmaps: 0 | ||||||
|  |   m_LightmapEditorSettings: | ||||||
|  |     serializedVersion: 12 | ||||||
|  |     m_Resolution: 2 | ||||||
|  |     m_BakeResolution: 40 | ||||||
|  |     m_AtlasSize: 1024 | ||||||
|  |     m_AO: 0 | ||||||
|  |     m_AOMaxDistance: 1 | ||||||
|  |     m_CompAOExponent: 1 | ||||||
|  |     m_CompAOExponentDirect: 0 | ||||||
|  |     m_ExtractAmbientOcclusion: 0 | ||||||
|  |     m_Padding: 2 | ||||||
|  |     m_LightmapParameters: {fileID: 0} | ||||||
|  |     m_LightmapsBakeMode: 1 | ||||||
|  |     m_TextureCompression: 1 | ||||||
|  |     m_FinalGather: 0 | ||||||
|  |     m_FinalGatherFiltering: 1 | ||||||
|  |     m_FinalGatherRayCount: 256 | ||||||
|  |     m_ReflectionCompression: 2 | ||||||
|  |     m_MixedBakeMode: 2 | ||||||
|  |     m_BakeBackend: 1 | ||||||
|  |     m_PVRSampling: 1 | ||||||
|  |     m_PVRDirectSampleCount: 32 | ||||||
|  |     m_PVRSampleCount: 512 | ||||||
|  |     m_PVRBounces: 2 | ||||||
|  |     m_PVREnvironmentSampleCount: 256 | ||||||
|  |     m_PVREnvironmentReferencePointCount: 2048 | ||||||
|  |     m_PVRFilteringMode: 1 | ||||||
|  |     m_PVRDenoiserTypeDirect: 1 | ||||||
|  |     m_PVRDenoiserTypeIndirect: 1 | ||||||
|  |     m_PVRDenoiserTypeAO: 1 | ||||||
|  |     m_PVRFilterTypeDirect: 0 | ||||||
|  |     m_PVRFilterTypeIndirect: 0 | ||||||
|  |     m_PVRFilterTypeAO: 0 | ||||||
|  |     m_PVREnvironmentMIS: 1 | ||||||
|  |     m_PVRCulling: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusDirect: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusIndirect: 5 | ||||||
|  |     m_PVRFilteringGaussRadiusAO: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaDirect: 0.5 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaIndirect: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaAO: 1 | ||||||
|  |     m_ExportTrainingData: 0 | ||||||
|  |     m_TrainingDataDestination: TrainingData | ||||||
|  |     m_LightProbeSampleCountMultiplier: 4 | ||||||
|  |   m_LightingDataAsset: {fileID: 0} | ||||||
|  |   m_LightingSettings: {fileID: 0} | ||||||
|  | --- !u!196 &4 | ||||||
|  | NavMeshSettings: | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_BuildSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     agentTypeID: 0 | ||||||
|  |     agentRadius: 0.5 | ||||||
|  |     agentHeight: 2 | ||||||
|  |     agentSlope: 45 | ||||||
|  |     agentClimb: 0.4 | ||||||
|  |     ledgeDropHeight: 0 | ||||||
|  |     maxJumpAcrossDistance: 0 | ||||||
|  |     minRegionArea: 2 | ||||||
|  |     manualCellSize: 0 | ||||||
|  |     cellSize: 0.16666667 | ||||||
|  |     manualTileSize: 0 | ||||||
|  |     tileSize: 256 | ||||||
|  |     accuratePlacement: 0 | ||||||
|  |     maxJobWorkers: 0 | ||||||
|  |     preserveTilesOutsideBounds: 0 | ||||||
|  |     debug: | ||||||
|  |       m_Flags: 0 | ||||||
|  |   m_NavMeshData: {fileID: 0} | ||||||
|  | --- !u!1001 &1243617387 | ||||||
|  | PrefabInstance: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 0} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: 5678077650178334411, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 200 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650315353685, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.y | ||||||
|  |       value: 160 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650315353685, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 870.00006 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 1080 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 540 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: -80 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346832, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: debugger_root | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346832, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_IsActive | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_Pivot.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_Pivot.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 3 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_SizeDelta.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 100 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: -50 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMax.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchorMin.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  |       propertyPath: m_AnchoredPosition.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3} | ||||||
|  | --- !u!1 &1409984334 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1409984337} | ||||||
|  |   - component: {fileID: 1409984336} | ||||||
|  |   - component: {fileID: 1409984335} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Main Camera | ||||||
|  |   m_TagString: MainCamera | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!81 &1409984335 | ||||||
|  | AudioListener: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1409984334} | ||||||
|  |   m_Enabled: 1 | ||||||
|  | --- !u!20 &1409984336 | ||||||
|  | Camera: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1409984334} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ClearFlags: 1 | ||||||
|  |   m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} | ||||||
|  |   m_projectionMatrixMode: 1 | ||||||
|  |   m_GateFitMode: 2 | ||||||
|  |   m_FOVAxisMode: 0 | ||||||
|  |   m_SensorSize: {x: 36, y: 24} | ||||||
|  |   m_LensShift: {x: 0, y: 0} | ||||||
|  |   m_FocalLength: 50 | ||||||
|  |   m_NormalizedViewPortRect: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |     width: 1 | ||||||
|  |     height: 1 | ||||||
|  |   near clip plane: 0.3 | ||||||
|  |   far clip plane: 1000 | ||||||
|  |   field of view: 60 | ||||||
|  |   orthographic: 0 | ||||||
|  |   orthographic size: 5 | ||||||
|  |   m_Depth: -1 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingPath: -1 | ||||||
|  |   m_TargetTexture: {fileID: 0} | ||||||
|  |   m_TargetDisplay: 0 | ||||||
|  |   m_TargetEye: 3 | ||||||
|  |   m_HDR: 1 | ||||||
|  |   m_AllowMSAA: 1 | ||||||
|  |   m_AllowDynamicResolution: 0 | ||||||
|  |   m_ForceIntoRT: 0 | ||||||
|  |   m_OcclusionCulling: 1 | ||||||
|  |   m_StereoConvergence: 10 | ||||||
|  |   m_StereoSeparation: 0.022 | ||||||
|  | --- !u!4 &1409984337 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1409984334} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 1, z: -10} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  | --- !u!1 &1597431377 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1597431379} | ||||||
|  |   - component: {fileID: 1597431378} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Directional Light | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!108 &1597431378 | ||||||
|  | Light: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1597431377} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 10 | ||||||
|  |   m_Type: 1 | ||||||
|  |   m_Shape: 0 | ||||||
|  |   m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} | ||||||
|  |   m_Intensity: 1 | ||||||
|  |   m_Range: 10 | ||||||
|  |   m_SpotAngle: 30 | ||||||
|  |   m_InnerSpotAngle: 21.80208 | ||||||
|  |   m_CookieSize: 10 | ||||||
|  |   m_Shadows: | ||||||
|  |     m_Type: 2 | ||||||
|  |     m_Resolution: -1 | ||||||
|  |     m_CustomResolution: -1 | ||||||
|  |     m_Strength: 1 | ||||||
|  |     m_Bias: 0.05 | ||||||
|  |     m_NormalBias: 0.4 | ||||||
|  |     m_NearPlane: 0.2 | ||||||
|  |     m_CullingMatrixOverride: | ||||||
|  |       e00: 1 | ||||||
|  |       e01: 0 | ||||||
|  |       e02: 0 | ||||||
|  |       e03: 0 | ||||||
|  |       e10: 0 | ||||||
|  |       e11: 1 | ||||||
|  |       e12: 0 | ||||||
|  |       e13: 0 | ||||||
|  |       e20: 0 | ||||||
|  |       e21: 0 | ||||||
|  |       e22: 1 | ||||||
|  |       e23: 0 | ||||||
|  |       e30: 0 | ||||||
|  |       e31: 0 | ||||||
|  |       e32: 0 | ||||||
|  |       e33: 1 | ||||||
|  |     m_UseCullingMatrixOverride: 0 | ||||||
|  |   m_Cookie: {fileID: 0} | ||||||
|  |   m_DrawHalo: 0 | ||||||
|  |   m_Flare: {fileID: 0} | ||||||
|  |   m_RenderMode: 0 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingLayerMask: 1 | ||||||
|  |   m_Lightmapping: 4 | ||||||
|  |   m_LightShadowCasterMode: 0 | ||||||
|  |   m_AreaSize: {x: 1, y: 1} | ||||||
|  |   m_BounceIntensity: 1 | ||||||
|  |   m_ColorTemperature: 6570 | ||||||
|  |   m_UseColorTemperature: 0 | ||||||
|  |   m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_UseBoundingSphereOverride: 0 | ||||||
|  |   m_UseViewFrustumForShadowCasterCull: 1 | ||||||
|  |   m_ShadowRadius: 0 | ||||||
|  |   m_ShadowAngle: 0 | ||||||
|  | --- !u!4 &1597431379 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1597431377} | ||||||
|  |   m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} | ||||||
|  |   m_LocalPosition: {x: 0, y: 3, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 1 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} | ||||||
|  | --- !u!1 &1847055078 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1847055080} | ||||||
|  |   - component: {fileID: 1847055079} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Main | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!114 &1847055079 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1847055078} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: ea03c9090000940e3a5ae500d9d918bc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | --- !u!4 &1847055080 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1847055078} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 2 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1873ecc2969fb40fdb00731d8abfd8f7 | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
		Loading…
	
		Reference in New Issue