update: add event bus
							parent
							
								
									1ecd077085
								
							
						
					
					
						commit
						252de80d7d
					
				|  | @ -60,7 +60,7 @@ namespace Guru.Editor | |||
|         #region 构建 Android 接口 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// 构建 Android 包体 | ||||
|         /// </summary> | ||||
|         /// <param name="buildParam"></param> | ||||
|         /// <returns></returns> | ||||
|  |  | |||
|  | @ -117,6 +117,7 @@ namespace Guru | |||
|         { | ||||
| 	        _badsloadStartTime = Time.realtimeSinceStartup; | ||||
| 	        _chanelMax.LoadBannerAD(); | ||||
| 	        OnBannerStartLoad?.Invoke(_chanelMax.MaxBADSSlotID); | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
|  | @ -148,6 +149,7 @@ namespace Guru | |||
|         private void OnLoadMaxIV() { | ||||
| 	        _iadsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | ||||
| 	        _chanelMax.LoadInterstitialAD(); | ||||
| 	        OnInterstitialStartLoad?.Invoke(_chanelMax.MaxIADSSlotID); | ||||
|         } | ||||
|          | ||||
|          | ||||
|  | @ -180,6 +182,7 @@ namespace Guru | |||
|         { | ||||
| 	        _radsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器 | ||||
| 	        _chanelMax.LoadRewardAD(); | ||||
| 	        OnRewardStartLoad?.Invoke(_chanelMax.MaxRADSSlotID); | ||||
|         } | ||||
|      | ||||
|          | ||||
|  |  | |||
|  | @ -26,11 +26,14 @@ namespace Guru | |||
| 
 | ||||
|         protected Action _onSdkInitReady; | ||||
|          | ||||
|         public static Action<string> OnBannerStartLoad; | ||||
|         public static Action OnBannerLoaded; | ||||
| 
 | ||||
|         public static Action<string> OnInterstitialStartLoad; | ||||
|         public static Action OnInterstitialLoaded; | ||||
|         public static Action OnInterstitialFailed; | ||||
| 
 | ||||
|         public static Action<string> OnRewardStartLoad; | ||||
|         public static Action OnRewardLoaded; | ||||
|         public static Action OnRewardFailed; | ||||
| 
 | ||||
|  | @ -545,7 +548,7 @@ namespace Guru | |||
|             if (IsRadsLoading) return; | ||||
|              | ||||
|             OnLoadRads(); | ||||
|             var id = GetRewardedVideoID(); | ||||
|             var id = GetRewardedID(); | ||||
|             Analytics.ADRadsLoad(AdParams.Build(id)); // 上报打点 | ||||
|             MaxSdk.LoadRewardedAd(id); | ||||
|         } | ||||
|  | @ -561,7 +564,7 @@ namespace Guru | |||
|             if (!IsInitialized) | ||||
|                 return false; | ||||
| 
 | ||||
|             return MaxSdk.IsRewardedAdReady(GetRewardedVideoID()); | ||||
|             return MaxSdk.IsRewardedAdReady(GetRewardedID()); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -589,7 +592,7 @@ namespace Guru | |||
|             _rewardAction = rewardAction; | ||||
|             _failAction = failAction; | ||||
|             _dismissAction = dismissAction; | ||||
|             MaxSdk.ShowRewardedAd(GetRewardedVideoID()); | ||||
|             MaxSdk.ShowRewardedAd(GetRewardedID()); | ||||
| 
 | ||||
|             // RequestRewardedAD(); | ||||
|         } | ||||
|  | @ -684,7 +687,7 @@ namespace Guru | |||
| 
 | ||||
|         #region Ad Settings | ||||
| 
 | ||||
|         protected virtual string GetRewardedVideoID() | ||||
|         protected virtual string GetRewardedID() | ||||
|         { | ||||
|             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 广告位 | ||||
|          | ||||
|         // ---------------- Max 广告位ID --------------------  | ||||
|         internal string MaxBannerSlotID => GuruSettings.Instance.ADSetting.GetBannerID(); | ||||
|         internal string MaxIVSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID(); | ||||
|         internal string MaxRVSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID(); | ||||
|         internal string MaxBADSSlotID => GuruSettings.Instance.ADSetting.GetBannerID(); | ||||
|         internal string MaxIADSSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID(); | ||||
|         internal string MaxRADSSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID(); | ||||
|          | ||||
|         #endregion | ||||
|          | ||||
|  | @ -49,11 +49,11 @@ namespace Guru | |||
|         { | ||||
|             // 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 | ||||
|             MaxSdk.CreateBanner(MaxBannerSlotID, MaxSdkBase.BannerPosition.BottomCenter); | ||||
|             MaxSdk.SetBannerExtraParameter(MaxBannerSlotID, "adaptive_banner", "false"); | ||||
|             MaxSdk.CreateBanner(MaxBADSSlotID, MaxSdkBase.BannerPosition.BottomCenter); | ||||
|             MaxSdk.SetBannerExtraParameter(MaxBADSSlotID, "adaptive_banner", "false"); | ||||
|             // Set background or background color for banners to be fully functional | ||||
|             MaxSdk.SetBannerBackgroundColor(MaxBannerSlotID, _backColor); | ||||
|             Analytics.ADBadsLoad(AdParams.Build(MaxBannerSlotID)); | ||||
|             MaxSdk.SetBannerBackgroundColor(MaxBADSSlotID, _backColor); | ||||
|             Analytics.ADBadsLoad(AdParams.Build(MaxBADSSlotID)); | ||||
|         } | ||||
|          | ||||
|         public void SetBannerBackColor(string hex) | ||||
|  | @ -69,8 +69,8 @@ namespace Guru | |||
|         public bool IsInterstitialRequestOver => true; | ||||
|         public void LoadInterstitialAD() | ||||
|         { | ||||
|             Analytics.ADIadsLoad(AdParams.Build(MaxIVSlotID)); // 上报打点 | ||||
|             MaxSdk.LoadInterstitial(MaxIVSlotID); | ||||
|             Analytics.ADIadsLoad(AdParams.Build(MaxIADSSlotID)); // 上报打点 | ||||
|             MaxSdk.LoadInterstitial(MaxIADSSlotID); | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
|  | @ -80,8 +80,8 @@ namespace Guru | |||
|         public bool IsRewardRequestOver => true; | ||||
|         public void LoadRewardAD() | ||||
|         { | ||||
|             Analytics.ADRadsLoad(AdParams.Build(MaxRVSlotID)); // 上报打点 | ||||
|             MaxSdk.LoadRewardedAd(MaxRVSlotID); | ||||
|             Analytics.ADRadsLoad(AdParams.Build(MaxRADSSlotID)); // 上报打点 | ||||
|             MaxSdk.LoadRewardedAd(MaxRADSSlotID); | ||||
|         } | ||||
| 
 | ||||
|         #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> | ||||
|     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_DEBUG = "DEBUG"; | ||||
|         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