diff --git a/Runtime/GuruAdjust/AdjustService.cs b/Runtime/GuruAdjust/AdjustService.cs index 7d698df..79dd0f0 100644 --- a/Runtime/GuruAdjust/AdjustService.cs +++ b/Runtime/GuruAdjust/AdjustService.cs @@ -53,9 +53,12 @@ namespace Guru /// /// /// MIR 追踪 AppID - /// + /// + /// 初始化完成的时候会返回 AdjustId /// - public static void StartService(string appToken, string fbAppId = "", Action onInitComplete = null, Action onDeeplinkCallback = null) + /// + public static void StartService(string appToken, string fbAppId = "", string firebaseId = "", string deviceId = "", + Action onInitComplete = null, Action onDeeplinkCallback = null) { if (string.IsNullOrEmpty(appToken)) { @@ -65,7 +68,7 @@ namespace Guru _onInitComplete = onInitComplete; - InstallEvent(IPMConfig.FIREBASE_ID, IPMConfig.IPM_DEVICE_ID); // 注入启动参数 + InstallEvent(firebaseId, deviceId); // 注入启动参数 AdjustEnvironment environment = GetAdjustEnvironment(); AdjustConfig config = new AdjustConfig(appToken, environment); diff --git a/Runtime/GuruAnalytics/Editor/Dependencies.xml b/Runtime/GuruAnalytics/Editor/Dependencies.xml index 0828d2a..eb7b1fa 100644 --- a/Runtime/GuruAnalytics/Editor/Dependencies.xml +++ b/Runtime/GuruAnalytics/Editor/Dependencies.xml @@ -8,18 +8,20 @@ Sample Dependencies.xml: - - - + + + - - + + - + + + diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar new file mode 100644 index 0000000..955b391 Binary files /dev/null and b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar.meta new file mode 100644 index 0000000..83b45e2 --- /dev/null +++ b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.11.1.aar.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 8009d3bf70bb4438599a32f6ea601f9d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.1.1.aar b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.1.1.aar index 6640250..4be633e 100644 Binary files a/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.1.1.aar and b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.1.1.aar differ diff --git a/Runtime/GuruAnalytics/Runtime/Script/Experiment.meta b/Runtime/GuruAnalytics/Runtime/Script/Experiment.meta new file mode 100644 index 0000000..9b07101 --- /dev/null +++ b/Runtime/GuruAnalytics/Runtime/Script/Experiment.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f6d79ccb59bc4a5791121a696d6695b0 +timeCreated: 1721722422 \ No newline at end of file diff --git a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs index ee97a29..5a63b54 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs @@ -1,6 +1,3 @@ - - - namespace Guru { using System; @@ -11,10 +8,25 @@ namespace Guru using UnityEngine; using System.Diagnostics.CodeAnalysis; + + /// + /// 自打点初始化配置 + /// + public class GuruAnalyticsInitConfig + { + public bool usingExtraSettings = false; + public string baseUrl = ""; + public string[] uploadIpAddress = null; + public bool enableErrorLog = false; + public bool isDebug = false; + public Action onInitComplete = null; + } + + public class GuruAnalytics { // Plugin Version - private const string Version = "1.11.1"; + private const string Version = "1.12.0"; public static readonly string Tag = "[ANU]"; private static readonly string ActionName = "logger_error"; @@ -105,20 +117,37 @@ namespace Guru /// /// 初始化接口 /// - public static void Init(string appId, string deviceInfo, Action onInitComplete, bool isDebug = false, - bool enableErrorLog = false) + public static void Init(string appId, string deviceInfo, GuruAnalyticsInitConfig initConfig, Action onInitComplete = null) { Debug.Log($"{Tag} --- Guru Analytics [{Version}] initialing..."); - if (_instance == null) { _instance = new GuruAnalytics(); - _instance.Agent.Init(appId, deviceInfo, onInitComplete, isDebug); - _instance.EnableErrorLog = enableErrorLog; + +#if UNITY_ANDROID + if (initConfig.usingExtraSettings && Instance.Agent is AnalyticsAgentAndroid androidAgent) + { + // 强制转换为 Android 的自打点初始化接口 + androidAgent.InitAndroidConfig(appId, deviceInfo, + initConfig.baseUrl, initConfig.uploadIpAddress, // <--- Android 附加参数 + onInitComplete,initConfig.isDebug); + } + else + { + // 外部(云控)如果关闭使用 Android 自打点附加参数, 则使用正常的启动接口 + _instance.Agent.Init(appId, deviceInfo, onInitComplete, initConfig.isDebug); + } +#else + // iOS 使用正常的启动接口 + _instance.Agent.Init(appId, deviceInfo, onInitComplete, initConfig.isDebug); +#endif + + _instance.EnableErrorLog = initConfig.enableErrorLog; _instance._isReady = true; } } + /// /// 设置视图名称 /// @@ -450,92 +479,6 @@ namespace Guru } } - /** - private void ParseWithRaw(string raw) - { - var code = (int)AnalyticsCode.Unknown; - string info; - - //------- message send to unity ---------- - Debug.Log($"{Tag} get callback errorInfo:\n{raw}"); - - - var patten = "msg\":\""; - if (raw.Contains(patten)) - { - - info = raw.Substring(raw.IndexOf(patten, StringComparison.Ordinal) + patten.Length); - if (!string.IsNullOrEmpty(info)) - { - if (info.StartsWith("\"")) info = info.Substring(1, info.Length - 1); - if (info.EndsWith("\"}}")) info = info.Replace("\"}}", ""); - } - else - { - info = "msg is null"; - } - } - else - { - info = "no msg property"; - } - - try - { - - var idx = raw.IndexOf(patten, StringComparison.Ordinal) + patten.Length; - string act = raw.Substring(idx, ActionName.Length); - if (act == ActionName) - { - patten = "code\":"; - var patten2 = ",\"msg"; - idx = raw.IndexOf(patten, StringComparison.Ordinal); - var idx2 = raw.IndexOf(patten2, StringComparison.Ordinal); - - var len = idx2 - (idx + patten.Length); - if (len > 0) - { - string c = raw.Substring(idx + patten.Length, len); - int.TryParse(c, out code); - } - - // Catch target code to report errors - switch ((AnalyticsCode)code) - { - case AnalyticsCode.Network_Lost: - case AnalyticsCode.ERROR_API: - case AnalyticsCode.ERROR_RESPONSE: - case AnalyticsCode.ERROR_CACHE_CONTROL: - case AnalyticsCode.ERROR_DELETE_EXPIRED: - case AnalyticsCode.ERROR_LOAD_MARK: - case AnalyticsCode.ERROR_DNS: - case AnalyticsCode.ERROR_ZIP: - OnLoggerErrorEvent(code, info); - return; - } - - return; - } - - } - catch (Exception ex) - { - Debug.LogError($"{Tag} Catch ex: {ex}\tJson:{raw}"); - Analytics.LogCrashlytics(raw, false); - Analytics.LogCrashlytics($"{Tag} --- Json:{raw} Ex:{ex}"); - OnLoggerErrorEvent(code, info); - return; - } - - if (raw.Contains("msg")) - { - Analytics.LogCrashlytics(raw, false); - Analytics.LogCrashlytics($"{Tag} --- format error:{raw}"); - OnLoggerErrorEvent(code, raw.Substring(raw.IndexOf("msg\":", StringComparison.Ordinal) + 5)); - } - } - **/ - private void ReportCodeInfo(int code, string info) { var ac = (AnalyticsCode)code; @@ -558,11 +501,13 @@ namespace Guru case AnalyticsCode.ERROR_ZIP: case AnalyticsCode.ERROR_DNS_CACHE: case AnalyticsCode.CRONET_INTERCEPTOR: + case AnalyticsCode.EVENT_LOOKUP: + case AnalyticsCode.EVENT_SESSION_ACTIVE: canCatch = true; break; } - if (code > 100 && code <= 200) + if (!canCatch && code is > 100 and <= 200) { // 100 < code <= 200 canCatch = true; @@ -601,6 +546,8 @@ namespace Guru } + + /// /// 网络状态枚举 /// @@ -608,21 +555,24 @@ namespace Guru { Unknown = -1, - DELETE_EXPIRED = 12, - UPLOAD_FAIL = 14, - NETWORK_LOST = 22, - CRONET_INIT_FAIL = 26, - CRONET_INIT_EXCEPTION = 27, + DELETE_EXPIRED = 12, // 删除过期事件 + UPLOAD_FAIL = 14, // 上报事件失败 + NETWORK_LOST = 22, // 网络状态不可用 + CRONET_INIT_FAIL = 26, // 开启Cronet失败 + CRONET_INIT_EXCEPTION = 27, // 开启Cronet报错 - ERROR_API = 101, - ERROR_RESPONSE = 102, - ERROR_CACHE_CONTROL = 103, - ERROR_DELETE_EXPIRED = 104, - ERROR_LOAD_MARK = 105, - ERROR_DNS = 106, - ERROR_ZIP = 107, - ERROR_DNS_CACHE = 108, - CRONET_INTERCEPTOR = 109, + ERROR_API = 101, // 调用api出错 + ERROR_RESPONSE = 102, // api返回结果错误 + ERROR_CACHE_CONTROL = 103, // 设置cacheControl出错 + ERROR_DELETE_EXPIRED = 104, // 删除过期事件出错 + ERROR_LOAD_MARK = 105, // 从数据库取事件以及更改事件状态为正在上报出错 + ERROR_DNS = 106, // dns 错误 + ERROR_ZIP = 107, // zip 错误 + ERROR_DNS_CACHE = 108, // zip 错误 + CRONET_INTERCEPTOR = 109, // cronet拦截器 + + EVENT_LOOKUP = 1003, + EVENT_SESSION_ACTIVE = 1004, } } diff --git a/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs b/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs index e73e0ac..3a551d6 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs @@ -17,7 +17,7 @@ namespace Guru void SetUid(string uid); bool IsDebug { get; } bool EnableErrorLog { get; set; } - void LogEvent(string eventName, string parameters, int priority = -1); + void LogEvent(string eventName, string parameters, int priority = 0); void ReportEventSuccessRate(); // 上报任务成功率 void SetTch02Value(double value); // 设置太极02数值 void InitCallback(string objName, string method); // 设置回调对象参数 diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs index 97dd967..4740d3d 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs @@ -6,6 +6,7 @@ namespace Guru { using System; using UnityEngine; + using System.Collections.Generic; public class AnalyticsAgentAndroid: IAnalyticsAgent { @@ -18,14 +19,10 @@ namespace Guru #endif private static bool _isDebug = false; - public static bool UseWorker = true; - public static bool UseCronet = false; public static string BaseUrl = ""; #region 工具方法 - - /// /// 调用静态方法 /// @@ -80,17 +77,69 @@ namespace Guru #region 接口实现 - public async void Init(string appId, string deviceInfo, Action onInitComplete, bool isDebug = false) + /// + /// 默认的启动参数 + /// + /// + /// + /// + /// + public void Init(string appId, string deviceInfo, Action onInitComplete, bool isDebug = false) { _isDebug = isDebug; string bundleId = Application.identifier; - // public static void init(String appId, String deviceInfo, String bundleId, boolean isDebug, boolean useWorker, boolean useCronet, String baseUrl) - - // TODO: 将来把 CallStatic 转为异步实现 - CallStatic("init", appId, deviceInfo, bundleId, isDebug, UseWorker, UseCronet, BaseUrl); // 调用接口 + bool useWorker = true; + bool useCronet = false; + string baseUrl = ""; + string[] uploadIpAddress = null; + CallSDKInit(appId, deviceInfo, bundleId, baseUrl, uploadIpAddress , useWorker, useCronet, isDebug); // 调用接口 + onInitComplete?.Invoke(); + } + + + /// + /// 面向 Android 启动专用的 API + /// + /// + /// + /// + /// + /// + /// + public void InitAndroidConfig(string appId, string deviceInfo, string baseUrl, string[]uploadIpAddress,Action onInitComplete = null, bool isDebug = false) + { + _isDebug = isDebug; + string bundleId = Application.identifier; + bool useWorker = true; + bool useCronet = false; + CallSDKInit(appId, deviceInfo, bundleId, baseUrl, uploadIpAddress , useWorker, useCronet, _isDebug); // 调用接口 onInitComplete?.Invoke(); } + + + /********* Android API ********** + public static void init(String appId, + String deviceInfo, + String bundleId, + boolean debug, + boolean useWorker, + boolean enabledCronet, + String baseUrl, + List uploadIpAddress) + */ + private void CallSDKInit(string appId, + string deviceInfo, + string bundleId, + string baseUrl = "", + string[] uploadIpAddress = null, + bool useWorker = true, + bool useCronet = false, + bool isDebug = false) + { + CallStatic("init", appId, deviceInfo, bundleId, isDebug, useWorker, useCronet, baseUrl, string.Join(",", uploadIpAddress)); // 调用接口 + } + public void SetScreen(string screenName) { @@ -134,10 +183,7 @@ namespace Guru } public bool IsDebug => CallStatic("isDebug"); - public void LogEvent(string eventName, string parameters, int priority = -1) - { - CallStatic("logEvent", eventName, parameters, priority); - } + public void LogEvent(string eventName, string parameters, int priority = 0) => CallStatic("logEvent", eventName, parameters, priority); public void ReportEventSuccessRate() => CallStatic("reportEventRate"); public void SetTch02Value(double value) => CallStatic("setTch02Value", value); public void InitCallback(string objName, string method) => CallStatic("initCallback", objName, method); diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs index 9bcd582..f11df70 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs @@ -125,7 +125,7 @@ namespace Guru public bool IsDebug => _isDebug; - public void LogEvent(string eventName, string data, int priority = -1) + public void LogEvent(string eventName, string data, int priority = 0) { #if UNITY_IOS unityLogEvent(eventName, data); diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentMock.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentMock.cs index 3c5e26b..afb0f51 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentMock.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentMock.cs @@ -92,7 +92,7 @@ namespace Guru public bool IsDebug => _isDebug; - public void LogEvent(string eventName, string parameters, int priority = -1) + public void LogEvent(string eventName, string parameters, int priority = 0) { if (_isShowLog) { diff --git a/Runtime/GuruAnalytics/~Sample.meta b/Runtime/GuruAnalytics/~Sample.meta deleted file mode 100644 index d5d69bb..0000000 --- a/Runtime/GuruAnalytics/~Sample.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 82693d012b64748c8ac997389b0426a7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs b/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs deleted file mode 100644 index ec471ff..0000000 --- a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -namespace Guru -{ - public class GuruAnalyticsDemo: MonoBehaviour - { - [SerializeField] private bool _isDebug = true; - [SerializeField] private Button _btnInitSDK; - [SerializeField] private Button _btnStatus; - [SerializeField] private Button _btnUserProperties; - [SerializeField] private Button _btnEvents; - [SerializeField] private Button _btnEvents2; - [SerializeField] private Button _btnReport; - [SerializeField] private Button _btnTestCrash; - - // ----------- All Status IDs ----------- - private static readonly string AdjustID = "e35b41522140fa2db9089ef3c78eb8f9"; - private static readonly string FirebaseID = "b7ab5fc399a7bc8725c004943fa82837"; - private static readonly string UID = "BS-YYYYF"; - private static readonly string AdID = "dda3cc2b-5a5e-44cb-8a59-4a0b1b3780fd"; - private static readonly string DeviceID = "e2fb3c5a4c36473648c989bd86a41153"; - private static readonly string AppID = ""; - private static readonly string DeviceInfo = ""; - - - private static readonly string ScreenName = "MainMenu"; - - - - private void Awake() - { - _btnInitSDK.onClick.AddListener(OnClickInit); - _btnStatus.onClick.AddListener(OnClickStatus); - _btnUserProperties.onClick.AddListener(OnClickUserProperties); - _btnEvents.onClick.AddListener(OnClickEvents); - _btnEvents2.onClick.AddListener(OnClickEvents2); - _btnReport.onClick.AddListener(OnClickReport); - _btnTestCrash.onClick.AddListener(OnClickTestCrash); -#if !UNITY_IOS - _btnTestCrash.gameObject.SetActive(false); -#endif - - - } - - - - #region Button Callbacks - - - private void OnClickInit() - { - Debug.Log($"---- [DEMO] Call Analytics init"); - GuruAnalytics.Init(AppID, DeviceInfo, OnGuruAnalyticsInitComplete, _isDebug); - } - - private void OnGuruAnalyticsInitComplete() - { - - } - - private void OnClickStatus() - { - Debug.Log($"---- [DEMO] Report Stats IDs: UID:{UID} DeviceID:{DeviceID} FirebaseID:{FirebaseID} AdID:{AdID} AdjustID:{AdjustID}"); - GuruAnalytics.Instance.SetUid(UID); - GuruAnalytics.Instance.SetDeviceId(DeviceID); - GuruAnalytics.Instance.SetFirebaseId(FirebaseID); - GuruAnalytics.Instance.SetAdId(AdID); - GuruAnalytics.Instance.SetAdjustId(AdjustID); - } - - private void OnClickUserProperties() - { - string item_category = "main"; - int level = 7; - Debug.Log($"---- [DEMO] Call SetUserProperty: item_category:{item_category} level:{level}"); - GuruAnalytics.Instance.SetUserProperty("item_category", item_category); - GuruAnalytics.Instance.SetUserProperty("level", level.ToString()); - } - - private void OnClickEvents() - { - Debug.Log($"---- [DEMO] Report Screen: {ScreenName}"); - GuruAnalytics.Instance.SetScreen(ScreenName); - - string eventName = "user_get_coin"; - Dictionary data = new Dictionary() - { - { "level", 7 }, - { "user_coin", 105L }, - { "win_rate", 21.25f }, - { "b_level", 7 }, - { "result", "retry" } - }; - - string s = "---- Data ----\n"; - foreach (var k in data.Keys) - { - s += $"-- K:{k} V:{data[k]}\n"; - } - Debug.Log(s); - - Debug.Log($"---- [DEMO] Call LogEvent"); - GuruAnalytics.Instance.LogEvent(eventName, data); - } - - private void OnClickEvents2() - { - string eventName = "user_data_loaded"; - GuruAnalytics.Instance.LogEvent(eventName); - } - - - private void OnClickReport() - { - GuruAnalytics.Instance.ReportEventSuccessRate(); - } - - - - private void OnClickTestCrash() - { -#if UNITY_IOS - Debug.Log($"--> OnClickTestCrash"); - GuruAnalytics.TestCrash(); -#endif - } - - - #endregion - - - - - - - - - } -} \ No newline at end of file diff --git a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs.meta b/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs.meta deleted file mode 100644 index 6d59a46..0000000 --- a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8fde2a18f7d347408a6b869ee03e7de9 -timeCreated: 1672712830 \ No newline at end of file diff --git a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity b/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity deleted file mode 100644 index c3a87bd..0000000 --- a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity +++ /dev/null @@ -1,2014 +0,0 @@ -%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.3731193, g: 0.38073996, b: 0.35872698, 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!1 &66634519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 66634520} - - component: {fileID: 66634523} - - component: {fileID: 66634522} - - component: {fileID: 66634521} - m_Layer: 5 - m_Name: btn_testcrash - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &66634520 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66634519} - 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: 728747533} - m_Father: {fileID: 1270885176} - m_RootOrder: 6 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &66634521 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66634519} - 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: 66634522} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &66634522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66634519} - 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.990566, g: 0.6337243, b: 0.43454072, a: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &66634523 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66634519} - m_CullTransparentMesh: 1 ---- !u!1 &97229769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 97229770} - - component: {fileID: 97229772} - - component: {fileID: 97229771} - - component: {fileID: 97229773} - m_Layer: 5 - m_Name: btn_init - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &97229770 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97229769} - 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: 1657584965} - m_Father: {fileID: 1270885176} - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &97229771 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97229769} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &97229772 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97229769} - m_CullTransparentMesh: 1 ---- !u!114 &97229773 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97229769} - 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: 97229771} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!1 &170095335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 170095336} - m_Layer: 5 - m_Name: root - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &170095336 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170095335} - 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: 483802708} - m_Father: {fileID: 295971387} - m_RootOrder: 2 - 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 &295971383 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 295971387} - - component: {fileID: 295971386} - - component: {fileID: 295971385} - - component: {fileID: 295971384} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &295971384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295971383} - 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!114 &295971385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295971383} - 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: 1920} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &295971386 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295971383} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 1 - m_Camera: {fileID: 531764817} - 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: 0 - m_TargetDisplay: 0 ---- !u!224 &295971387 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295971383} - 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: 1486183099} - - {fileID: 531764818} - - {fileID: 170095336} - 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!1 &483802707 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 483802708} - - component: {fileID: 483802709} - m_Layer: 5 - m_Name: analytics_demo - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &483802708 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 483802707} - 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: 1996017830} - m_Father: {fileID: 170095336} - 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!114 &483802709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 483802707} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8fde2a18f7d347408a6b869ee03e7de9, type: 3} - m_Name: - m_EditorClassIdentifier: - _isDebug: 1 - _btnInitSDK: {fileID: 97229773} - _btnStatus: {fileID: 2106733042} - _btnUserProperties: {fileID: 1299751324} - _btnEvents: {fileID: 1773066580} - _btnEvents2: {fileID: 2038787617} - _btnReport: {fileID: 611641100} - _btnTestCrash: {fileID: 66634521} ---- !u!1 &531764815 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 531764818} - - component: {fileID: 531764817} - - component: {fileID: 531764816} - m_Layer: 0 - m_Name: UICamera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &531764816 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531764815} - m_Enabled: 1 ---- !u!20 &531764817 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531764815} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, 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: -10 - far clip plane: 500 - field of view: 60 - orthographic: 1 - 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 &531764818 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531764815} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 295971387} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &611641098 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 611641099} - - component: {fileID: 611641102} - - component: {fileID: 611641101} - - component: {fileID: 611641100} - m_Layer: 5 - m_Name: btn_report - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &611641099 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611641098} - 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: 832164394} - m_Father: {fileID: 1270885176} - m_RootOrder: 5 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &611641100 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611641098} - 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: 611641101} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &611641101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611641098} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &611641102 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611641098} - m_CullTransparentMesh: 1 ---- !u!1 &728747532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 728747533} - - component: {fileID: 728747535} - - component: {fileID: 728747534} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &728747533 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728747532} - 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: 66634520} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &728747534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728747532} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u6D4B\u8BD5\u5D29\u6E83\u4E0A\u62A5" ---- !u!222 &728747535 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728747532} - m_CullTransparentMesh: 1 ---- !u!1 &832164393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 832164394} - - component: {fileID: 832164396} - - component: {fileID: 832164395} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &832164394 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 832164393} - 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: 611641099} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &832164395 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 832164393} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u4E0A\u62A5\u6253\u70B9\u6210\u529F\u7387" ---- !u!222 &832164396 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 832164393} - m_CullTransparentMesh: 1 ---- !u!1 &920755264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 920755265} - - component: {fileID: 920755267} - - component: {fileID: 920755266} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &920755265 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 920755264} - 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: 1773066579} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &920755266 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 920755264} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u4E0A\u62A5\u6253\u70B9\u4E8B\u4EF6" ---- !u!222 &920755267 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 920755264} - m_CullTransparentMesh: 1 ---- !u!1 &999622155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 999622156} - - component: {fileID: 999622158} - - component: {fileID: 999622157} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &999622156 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999622155} - 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: 2106733041} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &999622157 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999622155} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u4E0A\u62A5\u5404\u5C5E\u6027ID" ---- !u!222 &999622158 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999622155} - m_CullTransparentMesh: 1 ---- !u!1 &1270885175 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1270885176} - - component: {fileID: 1270885177} - m_Layer: 5 - m_Name: content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1270885176 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270885175} - 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: 97229770} - - {fileID: 2106733041} - - {fileID: 1299751323} - - {fileID: 1773066579} - - {fileID: 2038787616} - - {fileID: 611641099} - - {fileID: 66634520} - m_Father: {fileID: 1996017830} - 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: 405.2} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1270885177 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270885175} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 20 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &1299751322 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1299751323} - - component: {fileID: 1299751326} - - component: {fileID: 1299751325} - - component: {fileID: 1299751324} - m_Layer: 5 - m_Name: btn_userproperties - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1299751323 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299751322} - 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: 1727689995} - m_Father: {fileID: 1270885176} - m_RootOrder: 2 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1299751324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299751322} - 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: 1299751325} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1299751325 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299751322} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &1299751326 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299751322} - m_CullTransparentMesh: 1 ---- !u!1 &1486183098 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1486183099} - - component: {fileID: 1486183101} - - component: {fileID: 1486183100} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1486183099 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486183098} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -540, y: -960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 295971387} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1486183100 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486183098} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &1486183101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486183098} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!1 &1657584964 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1657584965} - - component: {fileID: 1657584967} - - component: {fileID: 1657584966} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1657584965 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657584964} - 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: 97229770} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1657584966 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657584964} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u521D\u59CB\u5316SDK" ---- !u!222 &1657584967 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657584964} - m_CullTransparentMesh: 1 ---- !u!1 &1727689994 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1727689995} - - component: {fileID: 1727689997} - - component: {fileID: 1727689996} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1727689995 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1727689994} - 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: 1299751323} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1727689996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1727689994} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u4E0A\u62A5\u7528\u6237\u5C5E\u6027" ---- !u!222 &1727689997 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1727689994} - m_CullTransparentMesh: 1 ---- !u!1 &1730981159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1730981160} - - component: {fileID: 1730981162} - - component: {fileID: 1730981161} - m_Layer: 5 - m_Name: label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1730981160 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1730981159} - 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: 2038787616} - 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: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1730981161 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1730981159} - 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: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} - m_RaycastTarget: 1 - 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: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u4E0A\u62A5\u6253\u70B9\u4E8B\u4EF6(\u4EC5\u4E8B\u4EF6\u540D)" ---- !u!222 &1730981162 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1730981159} - m_CullTransparentMesh: 1 ---- !u!1 &1773066578 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1773066579} - - component: {fileID: 1773066582} - - component: {fileID: 1773066581} - - component: {fileID: 1773066580} - m_Layer: 5 - m_Name: btn_events - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1773066579 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1773066578} - 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: 920755265} - m_Father: {fileID: 1270885176} - m_RootOrder: 3 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1773066580 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1773066578} - 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: 1773066581} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1773066581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1773066578} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &1773066582 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1773066578} - m_CullTransparentMesh: 1 ---- !u!1 &1996017829 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1996017830} - - component: {fileID: 1996017832} - - component: {fileID: 1996017831} - m_Layer: 5 - m_Name: root - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1996017830 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1996017829} - 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: 1270885176} - m_Father: {fileID: 483802708} - 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!114 &1996017831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1996017829} - 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.8} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &1996017832 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1996017829} - m_CullTransparentMesh: 1 ---- !u!1 &2038787615 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2038787616} - - component: {fileID: 2038787619} - - component: {fileID: 2038787618} - - component: {fileID: 2038787617} - m_Layer: 5 - m_Name: btn_event2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2038787616 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2038787615} - 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: 1730981160} - m_Father: {fileID: 1270885176} - m_RootOrder: 4 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2038787617 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2038787615} - 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: 2038787618} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &2038787618 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2038787615} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &2038787619 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2038787615} - m_CullTransparentMesh: 1 ---- !u!1 &2106733040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2106733041} - - component: {fileID: 2106733044} - - component: {fileID: 2106733043} - - component: {fileID: 2106733042} - m_Layer: 5 - m_Name: btn_status - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2106733041 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2106733040} - 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: 999622156} - m_Father: {fileID: 1270885176} - m_RootOrder: 1 - 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: 800, y: 120} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2106733042 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2106733040} - 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: 2106733043} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &2106733043 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2106733040} - 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: 1} - 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: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - 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!222 &2106733044 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2106733040} - m_CullTransparentMesh: 1 diff --git a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity.meta b/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity.meta deleted file mode 100644 index f586962..0000000 --- a/Runtime/GuruAnalytics/~Sample/GuruAnalyticsDemo.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ea095a004daab4fc096aa297c21fca99 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs index 20b2249..26c0acd 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs @@ -6,6 +6,7 @@ namespace Guru fail, timeout, exit, + replay } //打点常量定义 diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs index 85cc880..92e3938 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs @@ -25,47 +25,46 @@ namespace Guru private const string VALUE_ONLY_FOR_IOS = "idfa_only_for_ios"; public static bool IsDebug { get; set; } = false; - private static bool _isGuruAnalyticInitOnce = false; - /// - /// 初始化Guru自打点系统 (请优先于 Firebase 初始化调用) - /// - public static void InstallGuruAnalytics(bool isDebug = false, bool enableErrorLog = false) + public static void InitGuruAnalyticService(GuruAnalyticsInitConfig initConfig, string firebaseId) { - if (_isGuruAnalyticInitOnce) return; - try - { + Debug.Log($"{TAG} --- InstallGuruAnalytics baseUrl: {initConfig.baseUrl} enableErrorLog: {initConfig.enableErrorLog} firebaseId:{firebaseId}"); + + try + { #if UNITY_EDITOR - IsDebug = true; + IsDebug = true; #else IsDebug = isDebug; #endif - string appId = IPMConfig.IPM_X_APP_ID; - string deviceInfo = new DeviceInfoData().ToString(); - GuruAnalytics.Init(appId, deviceInfo, OnGuruAnalyticsInitComplete, IsDebug, enableErrorLog); // 初始化(带Header) - - _hasGotFirebaseId = false; - _hasGotAdId = false; - _hasGotAdjustId = false; - _hasGotDeviceId = false; - _hasGotUid = false; - _lastReportRateDate = DateTime.Now; - _reportSuccessInterval = 120; // 2分钟上报一次 - - UpdateAllValues(); + string appId = IPMConfig.IPM_X_APP_ID; + string deviceInfo = new DeviceInfoData().ToString(); - _isGuruAnalyticInitOnce = true; - } - catch (Exception ex) - { - LogCrashlytics(ex); - } + _hasGotFirebaseId = false; + _hasGotAdId = false; + _hasGotAdjustId = false; + _hasGotDeviceId = false; + _hasGotUid = false; + _lastReportRateDate = DateTime.Now; + _reportSuccessInterval = 120; // 2分钟上报一次 + + if(!string.IsNullOrEmpty(firebaseId)) + GuruAnalytics.Instance.SetFirebaseId(firebaseId); // 在自打点初始化之前, 需要调用一下设置 FirebaseId + + GuruAnalytics.Init(appId, deviceInfo, initConfig); // Android 初始化 + UpdateAllValues(); + } + catch (Exception ex) + { + LogCrashlytics(ex); + } } - #region 各ID上报信息 + + #region 各ID上报信息 /// /// 设置用户ID @@ -250,6 +249,8 @@ namespace Guru /// private static void UpdateAllValues() { + + Debug.Log($"{TAG} --- UpdateAllValues"); SetUid(); SetDeviceId(); SetAdjustId(); @@ -297,9 +298,16 @@ namespace Guru GuruAnalytics.Instance.SetUserProperty(key, value); UpdateAllValues(); // 同步所有的ID } - catch (Exception e) + catch (Exception ex) { - Crashlytics.LogException(e); + if (IsFirebaseReady) + { + Crashlytics.LogException(ex); + } + else + { + Debug.LogException(ex); + } } } @@ -319,7 +327,14 @@ namespace Guru } catch (Exception e) { - Crashlytics.LogException(e); + if (IsFirebaseReady) + { + Crashlytics.LogException(e); + } + else + { + Debug.LogWarning(e); + } } } @@ -343,7 +358,14 @@ namespace Guru } catch (Exception e) { - Crashlytics.LogException(e); + if (IsFirebaseReady) + { + Crashlytics.LogException(e); + } + else + { + Debug.LogWarning(e); + } } } diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs index 143c39f..2b26e98 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs @@ -1,6 +1,7 @@ -using System.Threading; +using System.Collections; +using UnityEngine; namespace Guru { @@ -39,7 +40,6 @@ namespace Guru }; } } - private static EventSetting DefaultEventSetting => EventSetting.GetDefaultSetting(); private static bool _isInitOnce; //Analytics是否初始化完成 @@ -48,26 +48,6 @@ namespace Guru public static bool IsDebugMode => PlatformUtil.IsDebug(); private static bool IsFirebaseReady => FirebaseUtil.IsFirebaseInitialized; - private static bool IsReady - { - get - { - //Analytics没有初始化不上报打点 - if (!_isInitOnce) return false; - - //Firebase服务没有初始化完成不上报打点 - if (!IsFirebaseReady) return false; - -#if !UNITY_EDITOR - //开发环境打点不上报 - if (IsDebugMode && !EnableDebugAnalytics) - return false; -#endif - return true; - } - } - - private static AdjustEventDriver _adjustEventDriver; private static FBEventDriver _fbEventDriver; private static FirebaseEventDriver _firebaseEventDriver; @@ -76,7 +56,15 @@ namespace Guru #region 初始化 - public static void InitAnalytics() + /// + /// 初始化打点模块 + /// + /// + /// + /// + /// + /// + public static void Init(string baseUrl = "", string[] uploadIpAddress = null, bool isEnable = false, bool enableErrorLog = false, string firebaseId = "") { if (_isInitOnce) return; _isInitOnce = true; @@ -85,21 +73,21 @@ namespace Guru _fbEventDriver = new FBEventDriver(); _firebaseEventDriver = new FirebaseEventDriver(); _guruEventDriver = new GuruEventDriver(); - - // ------- 初始化自打点 ---------- - InstallGuruAnalytics(IsDebug); } - - - + + /// + /// 外部拉起 Firebase 初始化完成回调 + /// public static void OnFirebaseInitCompleted() { Debug.Log($"[SDK] --- Analytics Init After FirebaseReady:{IsFirebaseReady}"); - // -------- 初始化 Crashlytics ---------- + // --- 初始化 Crashlytics --- CrashlyticsAgent.Init(); FirebaseAnalytics.SetAnalyticsCollectionEnabled(true); FirebaseAnalytics.SetSessionTimeoutDuration(new TimeSpan(0, 30, 0)); + + // --- 上报用户事件 --- SetUserProperty(FirebaseAnalytics.UserPropertySignUpMethod, "Google"); SetUserProperty(PropertyDeviceID, IPMConfig.IPM_DEVICE_ID); // SetUserProperty(PropertyFirstOpenTime, FirstOpenTime); @@ -118,7 +106,7 @@ namespace Guru _adjustEventDriver.TriggerFlush(); } - private static void OnGuruAnalyticsInitComplete() + public static void OnGuruAnalyticsInitComplete() { _guruEventDriver.TriggerFlush(); } @@ -152,13 +140,13 @@ namespace Guru /// /// Firebase上报用户ID /// - /// 通过Auth认证地用户ID - public static void SetUserIDProperty(string userID) + /// 通过Auth认证地用户ID + public static void SetFirebaseUserId(string uid) { - Log.I(TAG,$"SetUserIDProperty -> userID:{userID}"); - if (!IsReady) return; - - FirebaseAnalytics.SetUserId(userID); + if (!IsFirebaseReady) return; + Log.I(TAG,$"SetUserIDProperty -> userID:{uid}"); + FirebaseAnalytics.SetUserId(uid); + Crashlytics.SetUserId(uid); } /// @@ -168,7 +156,7 @@ namespace Guru { if (!_isInitOnce) { - throw new Exception($"[{TAG}][SDK] Analytics did not initialized, Call first!"); + throw new Exception($"[{TAG}][SDK] Analytics did not initialized, Call first!"); } if (IsDebug && !EnableDebugAnalytics) @@ -200,6 +188,25 @@ namespace Guru } + + /// + /// Firebase 上报用户属性 + /// + /// + /// + private static void FirebaseSetUserProperty(string propertyName, string propertyValue) + { + if (IsFirebaseReady) + { + FirebaseAnalytics.SetUserProperty(propertyName, propertyValue); + } + else + { + Debug.Log($"{TAG} --- Firebase not ready, call Firebase Init first!"); + } + } + + #endregion #region 打点上报 @@ -217,7 +224,7 @@ namespace Guru { if (!_isInitOnce) { - throw new Exception($"[{TAG}][SDK] Analytics did not initialized, Call first!"); + throw new Exception($"[{TAG}][SDK] Analytics did not initialized, Call first!"); } if (IsDebug && !EnableDebugAnalytics) @@ -352,5 +359,5 @@ namespace Guru } - + } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/ExtensionKit/CoroutineHelper.cs b/Runtime/GuruCore/Runtime/ExtensionKit/CoroutineHelper.cs index e2a2265..d4791fb 100644 --- a/Runtime/GuruCore/Runtime/ExtensionKit/CoroutineHelper.cs +++ b/Runtime/GuruCore/Runtime/ExtensionKit/CoroutineHelper.cs @@ -27,7 +27,7 @@ namespace Guru return ((MonoBehaviour)this).StartDelayed(delay, callback); } - public Coroutine StartDelayed(int framesOfDelay, Action callback) + public Coroutine StartDelayedWithFrame(int framesOfDelay, Action callback) { return ((MonoBehaviour)this).StartDelayed(framesOfDelay, callback); } diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs index 082d2cf..3ec8834 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs @@ -1,33 +1,55 @@ -using Firebase.Auth; -using Firebase.Extensions; -using UnityEngine; + namespace Guru { using System; + using Firebase.Auth; + using Firebase.Extensions; + using UnityEngine; + public static partial class FirebaseUtil { - public static FirebaseUser CurrentUser => FirebaseAuth.DefaultInstance.CurrentUser; + private static FirebaseUser FirebaseUser => FirebaseAuth.DefaultInstance.CurrentUser; + + private const float LOGIN_RETRY_MAX_TIME = 60; // 最大请求间隔时间 + private const float LOGIN_RETRY_INTERVAL = 10; // 最大请求间隔时间 - private static readonly WaitForSeconds _wait = new WaitForSeconds(10); - public static void AuthUser(Action onSuccessHandler = null) + private static float _retryDelayTime = 10; // 登录重试时间 + + /// + /// 登录 Firebase 用户 + /// + /// + /// + /// + private static void LoginFirebaseWithToken(Action onLoginResult = null, string authToken = "", bool autoRetry = true) { - //FirebaseAuth获取用户验证并同步用户数据 - if (CurrentUser != null) + // #1 Firebase 已获取用户 + if (FirebaseUser != null) { - Log.I(LOG_TAG, $"[Auth] user exists,UserId:{CurrentUser.UserId}"); - OnFirebaseAuthResult?.Invoke(true); - onSuccessHandler?.Invoke(); + Log.I(LOG_TAG, $"[Auth] user exists,UserId:{FirebaseUser.UserId}"); + onLoginResult?.Invoke(true); return; } - string authToken = IPMConfig.IPM_FIREBASE_TOKEN; + if (string.IsNullOrEmpty(authToken)) authToken = IPMConfig.IPM_FIREBASE_TOKEN; Log.I(LOG_TAG, $"[Auth] Firebase Token:{authToken}"); + if (string.IsNullOrEmpty(authToken) || !NetworkUtil.IsNetAvaliable) { - CoroutineHelper.Instance.StartDelayed(_wait, ()=> AuthUser(onSuccessHandler)); - OnFirebaseAuthResult?.Invoke(false); + // Token 为空 或 网络不可用 + if (autoRetry) + { + // 继续重试 + DelayCallFirebaseLogin(Mathf.Min(_retryDelayTime, LOGIN_RETRY_MAX_TIME), onLoginResult, authToken); + _retryDelayTime += LOGIN_RETRY_INTERVAL; // 最大重试间隔 60s + } + else + { + // 不再重试 + onLoginResult?.Invoke(false); + } return; } @@ -38,21 +60,34 @@ namespace Guru if (task.IsCanceled || task.IsFaulted) { Log.E(LOG_TAG,"[Auth] SignInWithCustomTokenAsync encountered an error: " + task.Exception); - OnFirebaseAuthResult?.Invoke(false); - CoroutineHelper.Instance.StartDelayed(_wait, () => AuthUser(onSuccessHandler)); + if (autoRetry) + { + DelayCallFirebaseLogin(_retryDelayTime, onLoginResult, authToken); // 自动重试 + } + else + { + onLoginResult?.Invoke(false); // 不再重试 + } return; } - // ----- User is NULL ----- - if (CurrentUser == null) - { - OnFirebaseAuthResult?.Invoke(false); - CoroutineHelper.Instance.StartDelayed(_wait, ()=> AuthUser(onSuccessHandler)); - return; - } - // ----- Success ----- - OnFirebaseAuthResult?.Invoke(true); // 最后判定是成功的 - onSuccessHandler?.Invoke(); + // ----- Check Result ----- + bool success = FirebaseUser != null; + onLoginResult?.Invoke(success); + _retryDelayTime = LOGIN_RETRY_INTERVAL; }); } + + + /// + /// 延迟调用 Firebase 登录请求 + /// + /// + /// + /// + private static void DelayCallFirebaseLogin(float delaySeconds, Action callback, string token = "") + { + var delay = new WaitForSeconds(delaySeconds); + CoroutineHelper.Instance.StartDelayed(delay, ()=> LoginFirebaseWithToken(callback, token)); + } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Crashlytics.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Crashlytics.cs index 1fa140c..7db3c36 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Crashlytics.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Crashlytics.cs @@ -5,6 +5,8 @@ namespace Guru { public static partial class FirebaseUtil { + + public static void InitCrashlytics() { if(!string.IsNullOrEmpty(IPMConfig.IPM_UID)) @@ -17,6 +19,7 @@ namespace Guru /// public static void SetUserID(string userID) { + if (!IsFirebaseInitialized) return; Crashlytics.SetUserId(userID); } @@ -26,6 +29,7 @@ namespace Guru /// public static void SetCustomData(string key, string value) { + if (!IsFirebaseInitialized) return; Crashlytics.SetCustomKey(key, value); } @@ -34,6 +38,7 @@ namespace Guru /// public static void LogMessage(string message) { + if (!IsFirebaseInitialized) return; Crashlytics.Log(message); } @@ -42,6 +47,7 @@ namespace Guru /// public static void LogException(Exception exception) { + if (!IsFirebaseInitialized) return; Crashlytics.LogException(exception); } } diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs index 7cf0a75..53ab10a 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs @@ -1,10 +1,12 @@ -using System; -using System.Collections; -using Firebase.Messaging; -using UnityEngine; + namespace Guru { + using System; + using System.Collections; + using Firebase.Messaging; + using UnityEngine; + public static partial class FirebaseUtil { private static int _messageRetry = 5; @@ -17,7 +19,7 @@ namespace Guru _isAutoFetchFcmToken = value; } - public static void InitializeMessage() + private static void InitializeMessage() { if (_isAutoFetchFcmToken) { @@ -48,7 +50,7 @@ namespace Guru if (task.IsFaulted || task.IsCanceled) { - CoroutineHelper.Instance.StartDelayed(_wait, GetFCMToken); + CoroutineHelper.Instance.StartDelayed(10, GetFCMToken); } else { @@ -84,14 +86,14 @@ namespace Guru } } - private static void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) + private static void OnTokenReceived(object sender, TokenReceivedEventArgs token) { #if UNITY_IOS DeviceUtil.SetiOSBadge(); #endif } - public static void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) + public static void OnMessageReceived(object sender, MessageReceivedEventArgs e) { #if UNITY_IOS DeviceUtil.SetiOSBadge(); diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.RemoteConfig.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.RemoteConfig.cs index db682c5..858166a 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.RemoteConfig.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.RemoteConfig.cs @@ -96,7 +96,7 @@ namespace Guru || _remoteConfigInstance.Info.LastFetchStatus != LastFetchStatus.Success) { Log.E(LOG_TAG, "Firebase RemoteConfig Fetch Failure"); - CoroutineHelper.Instance.StartDelayed(_wait, FetchRemoteValue); + CoroutineHelper.Instance.StartDelayed(10, FetchRemoteValue); return; } diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs index ad9441e..ec50666 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs @@ -1,160 +1,214 @@ -using System; -using Firebase; -using Firebase.Analytics; -using Firebase.Extensions; -using UnityEngine; - namespace Guru { + using System; + using Firebase; + using Firebase.Analytics; + using Firebase.Extensions; + using UnityEngine; + public static partial class FirebaseUtil { private static readonly string LOG_TAG = "Firebase"; private static bool _isReady = false; - public static bool IsReady => _isReady; - - public static DependencyStatus DependencyStatus = DependencyStatus.UnavailableOther; - public static bool IsFirebaseInitialized => DependencyStatus == DependencyStatus.Available; - public static Action onInitComplete; + public static bool IsReady => _isReady && IsFirebaseInitialized; - public static Action OnFirebaseAuthResult; - public static Action OnUserAuthResult; - // TODO: 需要从 FirebaseUtils 内拿走 - public static Action OnAdjustDeeplinkCallback = null; - - - public static void InitFirebase(Action callback) + private static DependencyStatus DependencyStatus = DependencyStatus.UnavailableOther; + public static bool IsFirebaseInitialized => DependencyStatus == DependencyStatus.Available; + + private static Action _onCheckAndFixDepsHandler; + private static Action _onGetFirebaseIdHandler; + private static Action _onGetGuruUIDHandler; + private static Action _onFirebaseLoginResult; + + /// + /// 初始化 Firebase + /// + /// Firebase 自身解决依赖结果回调 + /// 异步获取到 FirebaseId 回调 + /// Firebase 授权回调 + /// + public static void Init(Action onDepsCheckResult, Action onGetFirebaseId = null, + Action onGetGuruUIDResult = null, Action onFirebaseLoginResult = null) { _isReady = false; - // Analytics.InitAnalytics(); // 打点提前初始化 + _onCheckAndFixDepsHandler = onDepsCheckResult; + _onGetFirebaseIdHandler = onGetFirebaseId; + _onGetGuruUIDHandler = onGetGuruUIDResult; + _onFirebaseLoginResult = onFirebaseLoginResult; - // Loom.StartUp(); // 确保主线程开启 - - // 初始化 Fireabse 依赖 + // 初始化 Firebase 依赖 FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => { DependencyStatus = task.Result; if (DependencyStatus == DependencyStatus.Available) { _isReady = true; - InitializeFirebaseComp(); - callback?.Invoke(); + OnFirebaseDepsCheckSuccess(); // Deps 处理通过 } else { Log.E(LOG_TAG, "Could not resolve all Firebase dependencies: " + DependencyStatus); } - onInitComplete?.Invoke(_isReady); + _onCheckAndFixDepsHandler?.Invoke(_isReady); }); } - private static void InitializeFirebaseComp() + + /// + /// Deps 处理通过 + /// 初始化各模块 + /// + private static void OnFirebaseDepsCheckSuccess() { InitCrashlytics(); // 老项目沿用此逻辑 InitRemoteConfig(); // 老项目沿用此逻辑 - // TODO: 需要从 FirebaseUtils 内拿走 - InitAdjustService(); // 初始化 adjust 服务 + InitializeMessage(); // 初始化 Messaging 服务 + GetFirebaseIdAsync(); // 开始获取 FirebaseId - if (IPMConfig.IPM_UID.IsNullOrEmpty()) - { - Log.I(LOG_TAG, "没有存储UID时,从中台获取匿名认证授权"); - //没有存储UID时,从中台获取匿名认证授权 - new AuthUserRequest() - .SetRetryTimes(-1) - .SetSuccessCallBack(() => - { - OnUserAuthResult?.Invoke(true); - AuthUser(InitializeMessage); - }).SetFailCallBack(() => - { - OnUserAuthResult?.Invoke(false); - }) - .Send(); - } - else - { - InitializeMessage(); - int currentTimeStamp = TimeUtil.GetCurrentTimeStampSecond(); - if(currentTimeStamp - IPMConfig.IPM_TOKEN_TIME >= IPMConfig.TOKEN_VALID_TIME) - { - //中台Token失效,从中台重新获取Token - new RefreshTokenRequest().SetRetryTimes(-1).Send(); - } - - if(currentTimeStamp - IPMConfig.IPM_FIREBASE_TOKEN_TIME >= IPMConfig.FIREBASE_TOKEN_VALID_TIME) - { - //中台firebaseToken失效,从中台重新获取firebaseToken - new RefreshFirebaseTokenRequest() - .SetRetryTimes(-1) - .SetSuccessCallBack(()=> AuthUser(InitializeMessage)) - .Send(); - } - else - { - AuthUser(InitializeMessage); - } - } + StartVerifyTokenAndAuthAsync(); //开始验证授权和Token } - #region 启动 Adjust 服务 - - // TODO: 需要从 FirebaseUtils 内拿走 - /// - /// 启动 Adjust 服务 - /// - private static void InitAdjustService() + #region FirebaseId + + private static void GetFirebaseIdAsync() { + // 异步获取 FirebaseID FirebaseAnalytics.GetAnalyticsInstanceIdAsync() .ContinueWithOnMainThread(task => { - - if (task.IsCompleted && !string.IsNullOrEmpty(task.Result)) + string fid = task.Result; + if (task.IsCompleted && !string.IsNullOrEmpty(fid)) { // 保存本地ID备份 - string fid = task.Result; IPMConfig.FIREBASE_ID = fid; // 保存FirebaseID + Debug.Log($"[SDK] --- Get FirebaseID: {fid}"); } else { - UnityEngine.Debug.LogError($"Fetch FirebaseID failed on start!"); + Debug.LogError($"[SDK] --- Fetch FirebaseID failed on start!"); } - - // 启动 AdjustService - string appToken = GuruSettings.Instance.AdjustSetting?.GetAppToken() ?? ""; - string fbAppId = GuruSettings.Instance.IPMSetting.FacebookAppId; - - if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ID)) - ReportAdjustId(IPMConfig.ADJUST_ID); // 二次启动后,若有值则立即上报属性 - - AdjustService.StartService(appToken, fbAppId, OnGetAdjustId, OnAdjustDeeplinkCallback); - + _onGetFirebaseIdHandler?.Invoke(fid); }); } - private static void OnGetAdjustId(string adjustId) + #endregion + + #region Token and Auth + + /// + /// 异步验证所有 Token 有效期 + /// + private static void StartVerifyTokenAndAuthAsync() { - // 获取 ADID - if (string.IsNullOrEmpty(adjustId)) + if (string.IsNullOrEmpty(IPMConfig.IPM_UID)) { - adjustId = "not_set"; + Log.I(LOG_TAG, "没有存储UID时,从中台获取匿名认证授权"); + // 没有存储UID时,从中台获取匿名认证授权 + StartGuruLoginWithDeviceId(success => + { + _onGetGuruUIDHandler?.Invoke(success); + + if (success) { + // 用户 UID 不为空 + StartLoginWithFirebase(); + } + }); } else { - IPMConfig.ADJUST_ID = adjustId; + // 检查中台 Token 是否过期 + if (IsGuruTokenExpired()) + { + RefreshGuruToken(); + } + + // 检查中台 Firebase Token 是否过期 + if (IsFirebaseTokenExpired()) + { + RefreshFirebaseToken(StartLoginWithFirebase); // 重新获取 Firebase Token + } + else + { + StartLoginWithFirebase(); + } } - ReportAdjustId(adjustId); - - Analytics.OnAdjustInitComplete(); } + - - private static void ReportAdjustId(string adjustId) + /// + /// 使用设备 ID 进行中台匿名认证 + /// + private static void StartGuruLoginWithDeviceId(Action onLoginResult = null) { - FirebaseAnalytics.SetUserProperty("adjust_id", adjustId); // 仅上报 Firebase 用户属性 - Debug.Log($"[SDK] --- Firebase + Adjust ID: {adjustId}"); + // 没有存储UID时,从中台获取匿名认证授权 + var request = new AuthUserRequest() + .SetRetryTimes(-1) // 不成功的话会一直请求 + .SetSuccessCallBack(() => + { + onLoginResult?.Invoke(true); + }).SetFailCallBack(() => + { + onLoginResult?.Invoke(false); + }); + request.Send(); } + /// + /// Firebase Token 是否过期 + /// + /// + private static bool IsFirebaseTokenExpired() + { + int currentTimeStamp = TimeUtil.GetCurrentTimeStampSecond(); + return currentTimeStamp - IPMConfig.IPM_TOKEN_TIME >= IPMConfig.TOKEN_VALID_TIME; + } + + private static void RefreshFirebaseToken(Action onFirebaseTokenRefreshed = null) + { + //中台firebaseToken失效,从中台重新获取firebaseToken + var request = new RefreshFirebaseTokenRequest() + .SetRetryTimes(-1) + .SetSuccessCallBack(()=> onFirebaseTokenRefreshed?.Invoke()); + request.Send(); + } + + /// + /// Guru Token 是否过期 + /// + /// + private static bool IsGuruTokenExpired() + { + int currentTimeStamp = TimeUtil.GetCurrentTimeStampSecond(); + return currentTimeStamp - IPMConfig.IPM_FIREBASE_TOKEN_TIME >= IPMConfig.FIREBASE_TOKEN_VALID_TIME; + } + private static void RefreshGuruToken() + { + //中台Token失效,从中台重新获取Token + var request = new RefreshTokenRequest() + .SetRetryWaitSeconds(10) + .SetRetryTimes(-1); // 不成功的话会一直请求 + request.Send(); + } #endregion + + #region Firebase 用户登录 + /// + /// 开始登录 Firebase + /// + private static void StartLoginWithFirebase() + { + LoginFirebaseWithToken(OnFirebaseLoginComplete, IPMConfig.IPM_FIREBASE_TOKEN); // 成功后进行 Firebase 认证 + } + /// + /// Firebase 认证用户完成 + /// + /// + private static void OnFirebaseLoginComplete(bool success) + { + _onFirebaseLoginResult?.Invoke(success); + } + #endregion } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs index fa2d2d5..9f78a36 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs @@ -44,8 +44,7 @@ namespace Guru this.Log(response); this.Log(responseData.data.ToString()); - Analytics.SetUserIDProperty(responseData.data.uid); - Crashlytics.SetUserId(responseData.data.uid); + Analytics.SetFirebaseUserId(responseData.data.uid); IPMConfig.IPM_UID = responseData.data.uid; IPMConfig.IPM_UID_INT = responseData.data.uidInt; diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RefreshTokenRequest.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RefreshTokenRequest.cs index 74e3409..403831c 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RefreshTokenRequest.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RefreshTokenRequest.cs @@ -29,8 +29,7 @@ namespace Guru this.Log(responseData.data.ToString()); IPMConfig.IPM_TOKEN = responseData.data.token; IPMConfig.IPM_TOKEN_TIME = TimeUtil.GetCurrentTimeStampSecond(); - PlayerPrefs.SetString("IPM_TOKEN", responseData.data.token); - this.Log("@@@ Send OK!"); + this.Log($"[SDK] --- RefreshTokenRequest Success: {responseData.data.token}"); } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RequestBase.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RequestBase.cs index d6f6904..3358a1c 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RequestBase.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/RequestBase.cs @@ -13,7 +13,7 @@ namespace Guru protected abstract UnityWebRequest CreateRequest(); protected abstract void RequestSuccessCallBack(string response); - private readonly WaitForSeconds _waitTime = new WaitForSeconds(5); + private WaitForSeconds _waitTime = new WaitForSeconds(5); private int _retryTimes = 3; private int _timeOut = 90; @@ -28,6 +28,12 @@ namespace Guru return this; } + public RequestBase SetRetryWaitSeconds(int waitSeconds) + { + _waitTime = new WaitForSeconds(waitSeconds);; + return this; + } + public RequestBase SetTimeOut(int timeOut) { _timeOut = timeOut;