diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..bd154f0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,65 @@ +# =========== # +# Project # +# =========== # +/[Aa]ssetBundles/ +/[Ee]xportBundles/ + +# =============== # +# Unity generated # +# =============== # +[Tt]emp/ +[Oo]bj/ +[Bb]uild +/[Bb]uilds/ +/[Ll]ibrary/ +sysinfo.txt +*.stackdump +/Assets/AssetStoreTools* +*.apk +*.unitypackage +[Mm]emoryCaptures/ +*.wlt + +# ==================== # +# Unity 2020 generated # +# ==================== # +/[Ll]ogs/ +/[Uu]serSettings/ + +# ===================== # +# Visual Code generated # +# ===================== # +.vscode/ + +# ===================================== # +# Visual Studio / MonoDevelop generated # +# ===================================== # +[Ee]xported[Oo]bj/ +.vs/ +/*.userprefs +/*.csproj +/*.pidb +*.pidb.meta +/*.suo +/*.sln* +/*.user +/*.unityproj +/*.booproj +.consulo/ +/*.tmp +/*.svd +/*.htm + +# ============ # +# OS generated # +# ============ # +.DS_Store* +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +[Tt]humbs.db +[Tt]humbs.db.meta +[Dd]esktop.ini +Corridor/Library/ShaderCache/ +Corridor/Library/metadata/ \ No newline at end of file diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 00000000..1586a483 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Addons.meta b/Assets/Addons.meta new file mode 100644 index 00000000..8552ef2a --- /dev/null +++ b/Assets/Addons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96e629238f09e9e468b9ad57c2459ba4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket.meta b/Assets/Addons/UnityWebSocket.meta new file mode 100644 index 00000000..2e2d52f2 --- /dev/null +++ b/Assets/Addons/UnityWebSocket.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4a48e5bab43b85341bcf6c0f41824959 +folderAsset: yes +timeCreated: 1530672403 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Plugins.meta b/Assets/Addons/UnityWebSocket/Plugins.meta new file mode 100644 index 00000000..820207ab --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4589fa9979d007040b5a807b0304b1ff +folderAsset: yes +timeCreated: 1466577973 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Plugins/WebGL.meta b/Assets/Addons/UnityWebSocket/Plugins/WebGL.meta new file mode 100644 index 00000000..404a7f6b --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Plugins/WebGL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1a1a6aea65cc413faf8fb4421138b29 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib b/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib new file mode 100644 index 00000000..b420cdc7 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib @@ -0,0 +1,315 @@ +var WebSocketLibrary = +{ + $webSocketManager: + { + /* + * Map of instances + * + * Instance structure: + * { + * url: string, + * ws: WebSocket + * } + */ + instances: {}, + + /* Last instance ID */ + lastId: 0, + + /* Event listeners */ + onOpen: null, + onMessage: null, + onError: null, + onClose: null, + }, + + /** + * Set onOpen callback + * + * @param callback Reference to C# static function + */ + WebSocketSetOnOpen: function(callback) + { + webSocketManager.onOpen = callback; + }, + + /** + * Set onMessage callback + * + * @param callback Reference to C# static function + */ + WebSocketSetOnMessage: function(callback) + { + webSocketManager.onMessage = callback; + }, + + /** + * Set onMessage callback + * + * @param callback Reference to C# static function + */ + WebSocketSetOnMessageStr: function(callback) + { + webSocketManager.onMessageStr = callback; + }, + + /** + * Set onError callback + * + * @param callback Reference to C# static function + */ + WebSocketSetOnError: function(callback) + { + webSocketManager.onError = callback; + }, + + /** + * Set onClose callback + * + * @param callback Reference to C# static function + */ + WebSocketSetOnClose: function(callback) + { + webSocketManager.onClose = callback; + }, + + /** + * Allocate new WebSocket instance struct + * + * @param url Server URL + */ + WebSocketAllocate: function(url) + { + var urlStr = UTF8ToString(url); + var id = ++webSocketManager.lastId; + webSocketManager.instances[id] = { + url: urlStr, + ws: null + }; + return id; + }, + + /** + * Remove reference to WebSocket instance + * + * If socket is not closed function will close it but onClose event will not be emitted because + * this function should be invoked by C# WebSocket destructor. + * + * @param instanceId Instance ID + */ + WebSocketFree: function(instanceId) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return 0; + + // Close if not closed + if (instance.ws !== null && instance.ws.readyState < 2) + instance.ws.close(); + + // Remove reference + delete webSocketManager.instances[instanceId]; + + return 0; + }, + + /** + * Connect WebSocket to the server + * + * @param instanceId Instance ID + */ + WebSocketConnect: function(instanceId) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return -1; + if (instance.ws !== null) return -2; + + instance.ws = new WebSocket(instance.url); + + instance.ws.onopen = function() + { + if (webSocketManager.onOpen) + Module.dynCall_vi(webSocketManager.onOpen, instanceId); + }; + + instance.ws.onmessage = function(ev) + { + if (webSocketManager.onMessage === null) + return; + + if (ev.data instanceof ArrayBuffer) + { + var dataBuffer = new Uint8Array(ev.data); + var buffer = _malloc(dataBuffer.length); + HEAPU8.set(dataBuffer, buffer); + try + { + Module.dynCall_viii(webSocketManager.onMessage, instanceId, buffer, dataBuffer.length); + } + finally + { + _free(buffer); + } + } + else if (ev.data instanceof Blob) + { + var reader = new FileReader(); + reader.addEventListener("loadend", function() + { + var dataBuffer = new Uint8Array(reader.result); + var buffer = _malloc(dataBuffer.length); + HEAPU8.set(dataBuffer, buffer); + try + { + Module.dynCall_viii(webSocketManager.onMessage, instanceId, buffer, dataBuffer.length); + } + finally + { + reader = null; + _free(buffer); + } + }); + reader.readAsArrayBuffer(ev.data); + } + else if(typeof ev.data == 'string') + { + var length = lengthBytesUTF8(ev.data) + 1; + var buffer = _malloc(length); + stringToUTF8(ev.data, buffer, length); + try + { + Module.dynCall_vii(webSocketManager.onMessageStr, instanceId, buffer); + } + finally + { + _free(buffer); + } + } + else + { + console.log("[JSLIB WebSocket] not support message type: ", (typeof ev.data)); + } + }; + + instance.ws.onerror = function(ev) + { + if (webSocketManager.onError) + { + var msg = "WebSocket error."; + var length = lengthBytesUTF8(msg) + 1; + var buffer = _malloc(length); + stringToUTF8(msg, buffer, length); + try + { + Module.dynCall_vii(webSocketManager.onError, instanceId, buffer); + } + finally + { + _free(buffer); + } + } + }; + + instance.ws.onclose = function(ev) + { + if (webSocketManager.onClose) + { + var msg = ev.reason; + var length = lengthBytesUTF8(msg) + 1; + var buffer = _malloc(length); + stringToUTF8(msg, buffer, length); + try + { + Module.dynCall_viii(webSocketManager.onClose, instanceId, ev.code, buffer); + } + finally + { + _free(buffer); + } + } + + instance.ws = null; + }; + return 0; + }, + + /** + * Close WebSocket connection + * + * @param instanceId Instance ID + * @param code Close status code + * @param reasonPtr Pointer to reason string + */ + WebSocketClose: function(instanceId, code, reasonPtr) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return -1; + if (instance.ws === null) return -3; + if (instance.ws.readyState === 2) return -4; + if (instance.ws.readyState === 3) return -5; + + var reason = ( reasonPtr ? UTF8ToString(reasonPtr) : undefined ); + try + { + instance.ws.close(code, reason); + } + catch(err) + { + return -7; + } + return 0; + }, + + /** + * Send message over WebSocket + * + * @param instanceId Instance ID + * @param bufferPtr Pointer to the message buffer + * @param length Length of the message in the buffer + */ + WebSocketSend: function(instanceId, bufferPtr, length) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return -1; + if (instance.ws === null) return -3; + if (instance.ws.readyState !== 1) return -6; + + instance.ws.send(HEAPU8.slice(bufferPtr, bufferPtr + length)); + + return 0; + }, + + /** + * Send message string over WebSocket + * + * @param instanceId Instance ID + * @param stringPtr Pointer to the message string + */ + WebSocketSendStr: function(instanceId, stringPtr) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return -1; + if (instance.ws === null) return -3; + if (instance.ws.readyState !== 1) return -6; + + instance.ws.send(UTF8ToString(stringPtr)); + + return 0; + }, + + /** + * Return WebSocket readyState + * + * @param instanceId Instance ID + */ + WebSocketGetState: function(instanceId) + { + var instance = webSocketManager.instances[instanceId]; + if (!instance) return -1; + if (instance.ws === null) return 3; + + return instance.ws.readyState; + } +}; + +autoAddDeps(WebSocketLibrary, '$webSocketManager'); +mergeInto(LibraryManager.library, WebSocketLibrary); diff --git a/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib.meta b/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib.meta new file mode 100644 index 00000000..e9e84606 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Plugins/WebGL/WebSocket.jslib.meta @@ -0,0 +1,101 @@ +fileFormatVersion: 2 +guid: bd88770aa13fc47b08f87d2145e9ac6e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 0 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: WebGL + second: + enabled: 1 + settings: {} + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + WebGL: WebGL + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts.meta b/Assets/Addons/UnityWebSocket/Scripts.meta new file mode 100644 index 00000000..0a1e73b4 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89cd0cf8603ef4069b2f6a5d79cbdbe1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Editor.meta b/Assets/Addons/UnityWebSocket/Scripts/Editor.meta new file mode 100644 index 00000000..567ca440 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb71bb4fb62590c4b975ef865b4df25f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs b/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs new file mode 100644 index 00000000..0f2f4285 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs @@ -0,0 +1,229 @@ +using UnityEngine; +using UnityEditor; +using UnityEngine.Networking; +using System.IO; +using System; + +namespace UnityWebSocket.Editor +{ + internal class SettingsWindow : EditorWindow + { + static SettingsWindow window = null; + [MenuItem("Tools/UnityWebSocket", priority = 100)] + internal static void Open() + { + if (window != null) + { + window.Close(); + } + + window = GetWindow(true, "UnityWebSocket"); + window.minSize = window.maxSize = new Vector2(600, 310); + window.Show(); + window.BeginCheck(); + } + + private void OnGUI() + { + DrawLogo(); + DrawVersion(); + DrawSeparator(80); + DrawSeparator(186); + DrawHelper(); + DrawFooter(); + } + + Texture2D logoTex = null; + private void DrawLogo() + { + if (logoTex == null) + { + logoTex = new Texture2D(66, 66); + logoTex.LoadImage(Convert.FromBase64String(LOGO_BASE64.VALUE)); + for (int i = 0; i < 66; i++) for (int j = 0; j < 15; j++) logoTex.SetPixel(i, j, Color.clear); + logoTex.Apply(); + } + + var logoPos = new Rect(10, 10, 66, 66); + GUI.DrawTexture(logoPos, logoTex); + var title = "UnityWebSocket"; + var titlePos = new Rect(80, 20, 500, 50); + GUI.Label(titlePos, title, TextStyle(24)); + } + + private void DrawSeparator(int y) + { + EditorGUI.DrawRect(new Rect(10, y, 580, 1), Color.white * 0.5f); + } + + private GUIStyle TextStyle(int fontSize = 10, TextAnchor alignment = TextAnchor.UpperLeft, float alpha = 0.85f) + { + var style = new GUIStyle(); + style.fontSize = fontSize; + style.normal.textColor = (EditorGUIUtility.isProSkin ? Color.white : Color.black) * alpha; + style.alignment = alignment; + style.richText = true; + return style; + } + + private void DrawVersion() + { + GUI.Label(new Rect(440, 10, 150, 10), "Current Version: " + Settings.VERSION, TextStyle(alignment: TextAnchor.MiddleLeft)); + if (string.IsNullOrEmpty(latestVersion)) + { + GUI.Label(new Rect(440, 30, 150, 10), "Checking for Updates...", TextStyle(alignment: TextAnchor.MiddleLeft)); + } + else if (latestVersion == "unknown") + { + + } + else + { + GUI.Label(new Rect(440, 30, 150, 10), "Latest Version: " + latestVersion, TextStyle(alignment: TextAnchor.MiddleLeft)); + if (Settings.VERSION == latestVersion) + { + if (GUI.Button(new Rect(440, 50, 150, 18), "Check Update")) + { + latestVersion = ""; + changeLog = ""; + BeginCheck(); + } + } + else + { + if (GUI.Button(new Rect(440, 50, 150, 18), "Update to | " + latestVersion)) + { + ShowUpdateDialog(); + } + } + } + } + + private void ShowUpdateDialog() + { + var isOK = EditorUtility.DisplayDialog("UnityWebSocket", + "Update UnityWebSocket now?\n" + changeLog, + "Update Now", "Cancel"); + + if (isOK) + { + UpdateVersion(); + } + } + + private void UpdateVersion() + { + Application.OpenURL(Settings.GITHUB + "/releases"); + } + + private void DrawHelper() + { + GUI.Label(new Rect(330, 200, 100, 18), "GitHub:", TextStyle(10, TextAnchor.MiddleRight)); + if (GUI.Button(new Rect(440, 200, 150, 18), "UnityWebSocket")) + { + Application.OpenURL(Settings.GITHUB); + } + + GUI.Label(new Rect(330, 225, 100, 18), "Report:", TextStyle(10, TextAnchor.MiddleRight)); + if (GUI.Button(new Rect(440, 225, 150, 18), "Report an Issue")) + { + Application.OpenURL(Settings.GITHUB + "/issues/new"); + } + + GUI.Label(new Rect(330, 250, 100, 18), "Email:", TextStyle(10, TextAnchor.MiddleRight)); + if (GUI.Button(new Rect(440, 250, 150, 18), Settings.EMAIL)) + { + var uri = new Uri(string.Format("mailto:{0}?subject={1}", Settings.EMAIL, "UnityWebSocket Feedback")); + Application.OpenURL(uri.AbsoluteUri); + } + + GUI.Label(new Rect(330, 275, 100, 18), "QQ群:", TextStyle(10, TextAnchor.MiddleRight)); + if (GUI.Button(new Rect(440, 275, 150, 18), Settings.QQ_GROUP)) + { + Application.OpenURL(Settings.QQ_GROUP_LINK); + } + } + + private void DrawFooter() + { + EditorGUI.DropShadowLabel(new Rect(10, 230, 400, 20), "Developed by " + Settings.AUHTOR); + EditorGUI.DropShadowLabel(new Rect(10, 250, 400, 20), "All rights reserved"); + } + + UnityWebRequest req; + string changeLog = ""; + string latestVersion = ""; + void BeginCheck() + { + EditorApplication.update -= VersionCheckUpdate; + EditorApplication.update += VersionCheckUpdate; + + req = UnityWebRequest.Get(Settings.GITHUB + "/releases/latest"); + req.SendWebRequest(); + } + + private void VersionCheckUpdate() + { +#if UNITY_2020_3_OR_NEWER + if (req == null + || req.result == UnityWebRequest.Result.ConnectionError + || req.result == UnityWebRequest.Result.DataProcessingError + || req.result == UnityWebRequest.Result.ProtocolError) +#elif UNITY_2018_1_OR_NEWER + if (req == null || req.isNetworkError || req.isHttpError) +#else + if (req == null || req.isError) +#endif + { + EditorApplication.update -= VersionCheckUpdate; + latestVersion = "unknown"; + return; + } + + if (req.isDone) + { + EditorApplication.update -= VersionCheckUpdate; + latestVersion = req.url.Substring(req.url.LastIndexOf("/") + 1); + + if (Settings.VERSION != latestVersion) + { + var text = req.downloadHandler.text; + var st = text.IndexOf("content=\"" + latestVersion); + st = st > 0 ? text.IndexOf("\n", st) : -1; + var end = st > 0 ? text.IndexOf("\" />", st) : -1; + if (st > 0 && end > st) + { + changeLog = text.Substring(st + 1, end - st - 1).Trim(); + changeLog = changeLog.Replace("\r", ""); + changeLog = changeLog.Replace("\n", "\n- "); + changeLog = "\nCHANGE LOG: \n- " + changeLog + "\n"; + } + } + + Repaint(); + } + } + } + + internal static class LOGO_BASE64 + { + internal const string VALUE = "iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAMAAADUivDaAAAAq1BMVEUAAABKmtcvjtYzl" + + "9szmNszl9syl9k0mNs0mNwzmNs0mNszl9szl9s0mNs0mNwzmNw0mNwyltk0mNw0mNwzl9s0mNsymNs0mNszmNwzmNwzm" + + "NszmNs0mNwzl9w0mNwzmNw0mNs0mNs0mNwzl9wzmNs0mNwzmNs0mNwzl90zmNszmNszl9szmNsxmNszmNszmNw0mNwzm" + + "Nw0mNs2neM4pe41mt43ouo2oOY5qfM+UHlaAAAAMnRSTlMAAwXN3sgI+/069MSCK6M/MA74h9qfFHB8STWMJ9OSdmNcI" + + "8qya1IeF+/U0EIa57mqmFTYJe4AAAN3SURBVFjD7ZbpkppAFEa/bgVBREF2kEVGFNeZsM77P1kadURnJkr8k1Qlx1Khu" + + "/pw7+2lwH/+YcgfMBBLG7VocwDamzH+wJBB8Qhjve2f0TdrGwjei6o4Ub/nM/APw5Z7vvSB/qrCrqbD6fBEVtigeMxks" + + "fX9zWbj+z1jhqgSBplQ50eGo4614WXlRAzgrRhmtSfvxAn7pB0N5ObaKKZZuU5/d37IBcBgUQwqDuf7Z2gUmVAl4NGNr" + + "/UeHxV5n39ulbaKLI86h6HilmM5M1aN126lpNhtl59yeTsp8nUMvpNC1J3bh5FtfVRk+bJrJunn5d4U4piJ/Vw9eXgsj" + + "4ZpZaCjg9waZkIpnBWLJ44OwoNu60F2UnSaEkKv4XnAlCpm6B4F/aKMDiyGi2L8SEEAVdxNLuzmgV7nFwObEe2xQVuX+" + + "RV1lWetga3w+cN1sXgvm4cJH8OEgZC1DPKhfF/BIymmQrMjq/x65FUeEkDup8GxoexZmznHCvANtXU/CAq13yimhQGtm" + + "H4VCPnBBL1fTKo3CqEcvq7Lb/OwHxWTYlyw+JmjKoVvDLVOQB4pVsM8K8smgvLCxZDlIijwyOEc+nr/msMwK0+GQWGBd" + + "tmhjv8icTds1s2ammaFh04QLLe69NK7guP6mTDMaw3o6nAX/Z7EXUskPSvWEWg4srVlp5NTDXv9Lce9HGN5eeG4nj5Yz" + + "ACteU2wQLo4MBtJfd1nw5nG1/s9zwUQ6pykL1TQjqdeuvQW0naz2XKLYL4Cwzr4vj+OQdD96CSp7Lrynp4aeFF0xdm5q" + + "6OFtFfPv7URxpWJNjd/N+3+I9+1klMav12Qtgbt9R2JaIopjkzaPtOFq4KxUpqfUMSFnQrySWjLoQzRZS4HMH84ME1ej" + + "S1YJpQZ3B+sR1uCQJSBdGdCk1eAEgORR88KK05W8dh2MA+A/SKCYu3mCJ0Ek7HBx4HHeuwYy5G3x8hSMTJcOMFbinCsn" + + "hO1V1aszGULvA0g4UFsb4VA0hAFcyo6cgLsAoT7uUtGAH5wQKQle0wuLyxLTaNyJEYwxw4wSljLK1TP8CAaOyhBMMEsj" + + "OBoXgo7VGElFkSWL+vef1RF2YNXeRWYzQBTpkhC8KaZHhuIogArkQLKClBZjU26B2IZgGz+cpZkHl8g3fYUaW/YP2kb2" + + "M/V97JY/vZN859n+QmO7XtC9Bf2jAAAAABJRU5ErkJggg=="; + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs.meta new file mode 100644 index 00000000..ff291d9b --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Editor/SettingsWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c42d421cc4c34f3eae1fbd67f0dced0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef b/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef new file mode 100644 index 00000000..9ae7fa49 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "UnityWebSocket.Editor", + "references": [ + "UnityWebSocket.Runtime" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef.meta b/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef.meta new file mode 100644 index 00000000..851d4552 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Editor/UnityWebSocket.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ee833745c57bd4369ab8f0ff380a96fa +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime.meta new file mode 100644 index 00000000..497f84bf --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53e0ed9fdc3af42eba12a5b1b9a5f873 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core.meta new file mode 100644 index 00000000..75a53494 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b3a2a8f55d4a47f599b1fa3ed612389 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs new file mode 100644 index 00000000..d0d5831a --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs @@ -0,0 +1,89 @@ +using System; + +namespace UnityWebSocket +{ + /// + /// Represents the event data for the event. + /// + /// + /// + /// That event occurs when the WebSocket connection has been closed. + /// + /// + /// If you would like to get the reason for the close, you should access + /// the or property. + /// + /// + public class CloseEventArgs : EventArgs + { + #region Internal Constructors + + internal CloseEventArgs() + { + } + + internal CloseEventArgs(ushort code) + : this(code, null) + { + } + + internal CloseEventArgs(CloseStatusCode code) + : this((ushort)code, null) + { + } + + internal CloseEventArgs(CloseStatusCode code, string reason) + : this((ushort)code, reason) + { + } + + internal CloseEventArgs(ushort code, string reason) + { + Code = code; + Reason = reason; + } + + #endregion + + #region Public Properties + + /// + /// Gets the status code for the close. + /// + /// + /// A that represents the status code for the close if any. + /// + public ushort Code { get; private set; } + + /// + /// Gets the reason for the close. + /// + /// + /// A that represents the reason for the close if any. + /// + public string Reason { get; private set; } + + /// + /// Gets a value indicating whether the connection has been closed cleanly. + /// + /// + /// true if the connection has been closed cleanly; otherwise, false. + /// + public bool WasClean { get; internal set; } + + /// + /// Enum value same as Code + /// + public CloseStatusCode StatusCode + { + get + { + if (Enum.IsDefined(typeof(CloseStatusCode), Code)) + return (CloseStatusCode)Code; + return CloseStatusCode.Unknown; + } + } + + #endregion + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs.meta new file mode 100644 index 00000000..6e2a928a --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29b987d07ba15434cb1744135a7a5416 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs new file mode 100644 index 00000000..0da2ddbd --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs @@ -0,0 +1,91 @@ +namespace UnityWebSocket +{ + /// + /// Indicates the status code for the WebSocket connection close. + /// + /// + /// + /// The values of this enumeration are defined in + /// + /// Section 7.4 of RFC 6455. + /// + /// + /// "Reserved value" cannot be sent as a status code in + /// closing handshake by an endpoint. + /// + /// + public enum CloseStatusCode : ushort + { + Unknown = 65534, + /// + /// Equivalent to close status 1000. Indicates normal close. + /// + Normal = 1000, + /// + /// Equivalent to close status 1001. Indicates that an endpoint is + /// going away. + /// + Away = 1001, + /// + /// Equivalent to close status 1002. Indicates that an endpoint is + /// terminating the connection due to a protocol error. + /// + ProtocolError = 1002, + /// + /// Equivalent to close status 1003. Indicates that an endpoint is + /// terminating the connection because it has received a type of + /// data that it cannot accept. + /// + UnsupportedData = 1003, + /// + /// Equivalent to close status 1004. Still undefined. A Reserved value. + /// + Undefined = 1004, + /// + /// Equivalent to close status 1005. Indicates that no status code was + /// actually present. A Reserved value. + /// + NoStatus = 1005, + /// + /// Equivalent to close status 1006. Indicates that the connection was + /// closed abnormally. A Reserved value. + /// + Abnormal = 1006, + /// + /// Equivalent to close status 1007. Indicates that an endpoint is + /// terminating the connection because it has received a message that + /// contains data that is not consistent with the type of the message. + /// + InvalidData = 1007, + /// + /// Equivalent to close status 1008. Indicates that an endpoint is + /// terminating the connection because it has received a message that + /// violates its policy. + /// + PolicyViolation = 1008, + /// + /// Equivalent to close status 1009. Indicates that an endpoint is + /// terminating the connection because it has received a message that + /// is too big to process. + /// + TooBig = 1009, + /// + /// Equivalent to close status 1010. Indicates that a client is + /// terminating the connection because it has expected the server to + /// negotiate one or more extension, but the server did not return + /// them in the handshake response. + /// + MandatoryExtension = 1010, + /// + /// Equivalent to close status 1011. Indicates that a server is + /// terminating the connection because it has encountered an unexpected + /// condition that prevented it from fulfilling the request. + /// + ServerError = 1011, + /// + /// Equivalent to close status 1015. Indicates that the connection was + /// closed due to a failure to perform a TLS handshake. A Reserved value. + /// + TlsHandshakeFailure = 1015, + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs.meta new file mode 100644 index 00000000..48e96605 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/CloseStatusCode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e34ee317292e4225a10427cc35f85ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs new file mode 100644 index 00000000..cfb91b87 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs @@ -0,0 +1,59 @@ +using System; + +namespace UnityWebSocket +{ + /// + /// Represents the event data for the event. + /// + /// + /// + /// That event occurs when the gets an error. + /// + /// + /// If you would like to get the error message, you should access + /// the property. + /// + /// + /// And if the error is due to an exception, you can get it by accessing + /// the property. + /// + /// + public class ErrorEventArgs : EventArgs + { + #region Internal Constructors + + internal ErrorEventArgs(string message) + : this(message, null) + { + } + + internal ErrorEventArgs(string message, Exception exception) + { + this.Message = message; + this.Exception = exception; + } + + #endregion + + #region Public Properties + + /// + /// Gets the exception that caused the error. + /// + /// + /// An instance that represents the cause of + /// the error if it is due to an exception; otherwise, . + /// + public Exception Exception { get; private set; } + + /// + /// Gets the error message. + /// + /// + /// A that represents the error message. + /// + public string Message { get; private set; } + + #endregion + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs.meta new file mode 100644 index 00000000..47a5055b --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/ErrorEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 884e7db60b6444154b7200e0e436f2de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs new file mode 100644 index 00000000..37c57ebf --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs @@ -0,0 +1,138 @@ +using System; + +namespace UnityWebSocket +{ + /// + /// IWebSocket indicate a network connection. + /// It can be connecting, connected, closing or closed state. + /// You can send and receive messages by using it. + /// Register callbacks for handling messages. + /// ----------------------------------------------------------- + /// IWebSocket 表示一个网络连接, + /// 它可以是 connecting connected closing closed 状态, + /// 可以发送和接收消息, + /// 通过注册消息回调,来处理接收到的消息。 + /// + public interface IWebSocket + { + /// + /// Establishes a connection asynchronously. + /// + /// + /// + /// This method does not wait for the connect process to be complete. + /// + /// + /// This method does nothing if the connection has already been + /// established. + /// + /// + /// + /// + /// This instance is not a client. + /// + /// + /// -or- + /// + /// + /// The close process is in progress. + /// + /// + /// -or- + /// + /// + /// A series of reconnecting has failed. + /// + /// + void ConnectAsync(); + + /// + /// Closes the connection asynchronously. + /// + /// + /// + /// This method does not wait for the close to be complete. + /// + /// + /// This method does nothing if the current state of the connection is + /// Closing or Closed. + /// + /// + void CloseAsync(); + + /// + /// Sends the specified data asynchronously using the WebSocket connection. + /// + /// + /// This method does not wait for the send to be complete. + /// + /// + /// An array of that represents the binary data to send. + /// + /// + /// The current state of the connection is not Open. + /// + /// + /// is . + /// + void SendAsync(byte[] data); + + /// + /// Sends the specified data using the WebSocket connection. + /// + /// + /// A that represents the text data to send. + /// + /// + /// The current state of the connection is not Open. + /// + /// + /// is . + /// + /// + /// could not be UTF-8 encoded. + /// + void SendAsync(string text); + + /// + /// get the address which to connect. + /// + string Address { get; } + + /// + /// Gets the current state of the connection. + /// + /// + /// + /// One of the enum values. + /// + /// + /// It indicates the current state of the connection. + /// + /// + /// The default value is . + /// + /// + WebSocketState ReadyState { get; } + + /// + /// Occurs when the WebSocket connection has been established. + /// + event EventHandler OnOpen; + + /// + /// Occurs when the WebSocket connection has been closed. + /// + event EventHandler OnClose; + + /// + /// Occurs when the gets an error. + /// + event EventHandler OnError; + + /// + /// Occurs when the receives a message. + /// + event EventHandler OnMessage; + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs.meta new file mode 100644 index 00000000..ae658256 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/IWebSocket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37ee2146eb8c34ffab8b081a632b05cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs new file mode 100644 index 00000000..a80fbae8 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs @@ -0,0 +1,115 @@ +using System; +using System.Text; + +namespace UnityWebSocket +{ + public class MessageEventArgs : EventArgs + { + private byte[] _rawData; + private string _data; + + internal MessageEventArgs(Opcode opcode, byte[] rawData) + { + Opcode = opcode; + _rawData = rawData; + } + + internal MessageEventArgs(Opcode opcode, string data) + { + Opcode = opcode; + _data = data; + } + + /// + /// Gets the opcode for the message. + /// + /// + /// , . + /// + internal Opcode Opcode { get; private set; } + + /// + /// Gets the message data as a . + /// + /// + /// A that represents the message data if its type is + /// text and if decoding it to a string has successfully done; + /// otherwise, . + /// + public string Data + { + get + { + SetData(); + return _data; + } + } + + /// + /// Gets the message data as an array of . + /// + /// + /// An array of that represents the message data. + /// + public byte[] RawData + { + get + { + SetRawData(); + return _rawData; + } + } + + /// + /// Gets a value indicating whether the message type is binary. + /// + /// + /// true if the message type is binary; otherwise, false. + /// + public bool IsBinary + { + get + { + return Opcode == Opcode.Binary; + } + } + + /// + /// Gets a value indicating whether the message type is text. + /// + /// + /// true if the message type is text; otherwise, false. + /// + public bool IsText + { + get + { + return Opcode == Opcode.Text; + } + } + + private void SetData() + { + if (_data != null) return; + + if (RawData == null) + { + return; + } + + _data = Encoding.UTF8.GetString(RawData); + } + + private void SetRawData() + { + if (_rawData != null) return; + + if (_data == null) + { + return; + } + + _rawData = Encoding.UTF8.GetBytes(_data); + } + } +} \ No newline at end of file diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs.meta new file mode 100644 index 00000000..1c3a7d13 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/MessageEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b44eda173b4924081bab76ae9d1b0a9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs new file mode 100644 index 00000000..3e758e23 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs @@ -0,0 +1,26 @@ +namespace UnityWebSocket +{ + /// + /// Indicates the WebSocket frame type. + /// + /// + /// The values of this enumeration are defined in + /// + /// Section 5.2 of RFC 6455. + /// + public enum Opcode : byte + { + /// + /// Equivalent to numeric value 1. Indicates text frame. + /// + Text = 0x1, + /// + /// Equivalent to numeric value 2. Indicates binary frame. + /// + Binary = 0x2, + /// + /// Equivalent to numeric value 8. Indicates connection close frame. + /// + Close = 0x8, + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs.meta new file mode 100644 index 00000000..a7ed802f --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Opcode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eeac0ef90273544ebbae046672caf362 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs new file mode 100644 index 00000000..fa84a33d --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs @@ -0,0 +1,11 @@ +using System; + +namespace UnityWebSocket +{ + public class OpenEventArgs : EventArgs + { + internal OpenEventArgs() + { + } + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs.meta new file mode 100644 index 00000000..0cfe2c2d --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/OpenEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fb6fd704bd4e4b8ba63cd0b28712955 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs new file mode 100644 index 00000000..2f2754f4 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs @@ -0,0 +1,12 @@ +namespace UnityWebSocket +{ + public static class Settings + { + public const string GITHUB = "https://github.com/psygames/UnityWebSocket"; + public const string QQ_GROUP = "1126457634"; + public const string QQ_GROUP_LINK = "https://qm.qq.com/cgi-bin/qm/qr?k=KcexYJ9aYwogFXbj2aN0XHH5b2G7ICmd"; + public const string EMAIL = "799329256@qq.com"; + public const string AUHTOR = "psygames"; + public const string VERSION = "2.6.4"; + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs.meta new file mode 100644 index 00000000..e8e36229 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/Settings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e268303c7a605e343b1b132e5559f01f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs new file mode 100644 index 00000000..796ab15f --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs @@ -0,0 +1,36 @@ +namespace UnityWebSocket +{ + /// + /// Reference html5 WebSocket ReadyState Properties + /// Indicates the state of a WebSocket connection. + /// + /// + /// The values of this enumeration are defined in + /// + /// The WebSocket API. + /// + public enum WebSocketState : ushort + { + /// + /// Equivalent to numeric value 0. Indicates that the connection has not + /// yet been established. + /// + Connecting = 0, + /// + /// Equivalent to numeric value 1. Indicates that the connection has + /// been established, and the communication is possible. + /// + Open = 1, + /// + /// Equivalent to numeric value 2. Indicates that the connection is + /// going through the closing handshake, or the close method has + /// been invoked. + /// + Closing = 2, + /// + /// Equivalent to numeric value 3. Indicates that the connection has + /// been closed or could not be established. + /// + Closed = 3 + } +} diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs.meta new file mode 100644 index 00000000..94877ec5 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Core/WebSocketState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f6567ad13cb147a59f8af784f1c5f60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation.meta new file mode 100644 index 00000000..abb1981f --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 396c66b333d624d539153070900bb73b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL.meta new file mode 100644 index 00000000..dc70a45c --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c110a898ae8b0b41bcf4da49c2b0425 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs new file mode 100644 index 00000000..b3358e50 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs @@ -0,0 +1,339 @@ +#if !NET_LEGACY && (UNITY_EDITOR || !UNITY_WEBGL) +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Net.WebSockets; +using System.IO; + +namespace UnityWebSocket +{ + public class WebSocket : IWebSocket + { + public string Address { get; private set; } + + public WebSocketState ReadyState + { + get + { + if (socket == null) + return WebSocketState.Closed; + switch (socket.State) + { + case System.Net.WebSockets.WebSocketState.Closed: + case System.Net.WebSockets.WebSocketState.None: + return WebSocketState.Closed; + case System.Net.WebSockets.WebSocketState.CloseReceived: + case System.Net.WebSockets.WebSocketState.CloseSent: + return WebSocketState.Closing; + case System.Net.WebSockets.WebSocketState.Connecting: + return WebSocketState.Connecting; + case System.Net.WebSockets.WebSocketState.Open: + return WebSocketState.Open; + } + return WebSocketState.Closed; + } + } + + public event EventHandler OnOpen; + public event EventHandler OnClose; + public event EventHandler OnError; + public event EventHandler OnMessage; + + private ClientWebSocket socket; + private bool isOpening => socket != null && socket.State == System.Net.WebSockets.WebSocketState.Open; + + #region APIs + public WebSocket(string address) + { + this.Address = address; + } + + public void ConnectAsync() + { +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + WebSocketManager.Instance.Add(this); +#endif + if (socket != null) + { + HandleError(new Exception("Socket is busy.")); + return; + } + socket = new ClientWebSocket(); + Task.Run(ConnectTask); + } + + public void CloseAsync() + { + if (!isOpening) return; + SendBufferAsync(new SendBuffer(null, WebSocketMessageType.Close)); + } + + public void SendAsync(byte[] data) + { + if (!isOpening) return; + var buffer = new SendBuffer(data, WebSocketMessageType.Binary); + SendBufferAsync(buffer); + } + + public void SendAsync(string text) + { + if (!isOpening) return; + var data = Encoding.UTF8.GetBytes(text); + var buffer = new SendBuffer(data, WebSocketMessageType.Text); + SendBufferAsync(buffer); + } + #endregion + + + private async Task ConnectTask() + { + Log("Connect Task Begin ..."); + + try + { + var uri = new Uri(Address); + await socket.ConnectAsync(uri, CancellationToken.None); + } + catch (Exception e) + { + HandleError(e); + HandleClose((ushort)CloseStatusCode.Abnormal, e.Message); + SocketDispose(); + return; + } + + HandleOpen(); + + Log("Connect Task End !"); + + await ReceiveTask(); + } + + class SendBuffer + { + public byte[] data; + public WebSocketMessageType type; + public SendBuffer(byte[] data, WebSocketMessageType type) + { + this.data = data; + this.type = type; + } + } + + private object sendQueueLock = new object(); + private Queue sendQueue = new Queue(); + private bool isSendTaskRunning; + + private void SendBufferAsync(SendBuffer buffer) + { + if (isSendTaskRunning) + { + lock (sendQueueLock) + { + if (buffer.type == WebSocketMessageType.Close) + { + sendQueue.Clear(); + } + sendQueue.Enqueue(buffer); + } + } + else + { + isSendTaskRunning = true; + sendQueue.Enqueue(buffer); + Task.Run(SendTask); + } + } + + private async Task SendTask() + { + Log("Send Task Begin ..."); + + try + { + SendBuffer buffer = null; + while (sendQueue.Count > 0 && isOpening) + { + lock (sendQueueLock) + { + buffer = sendQueue.Dequeue(); + } + if (buffer.type == WebSocketMessageType.Close) + { + Log($"Close Send Begin ..."); + await socket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "Normal Closure", CancellationToken.None); + Log($"Close Send End !"); + } + else + { + Log($"Send, type: {buffer.type}, size: {buffer.data.Length}, queue left: {sendQueue.Count}"); + await socket.SendAsync(new ArraySegment(buffer.data), buffer.type, true, CancellationToken.None); + } + } + } + catch (Exception e) + { + HandleError(e); + } + finally + { + isSendTaskRunning = false; + } + + Log("Send Task End !"); + } + + private async Task ReceiveTask() + { + Log("Receive Task Begin ..."); + + string closeReason = ""; + ushort closeCode = 0; + bool isClosed = false; + var segment = new ArraySegment(new byte[8192]); + var ms = new MemoryStream(); + + try + { + while (!isClosed) + { + var result = await socket.ReceiveAsync(segment, CancellationToken.None); + ms.Write(segment.Array, 0, result.Count); + if (!result.EndOfMessage) continue; + var data = ms.ToArray(); + ms.SetLength(0); + switch (result.MessageType) + { + case WebSocketMessageType.Binary: + HandleMessage(Opcode.Binary, data); + break; + case WebSocketMessageType.Text: + HandleMessage(Opcode.Text, data); + break; + case WebSocketMessageType.Close: + isClosed = true; + closeCode = (ushort)result.CloseStatus; + closeReason = result.CloseStatusDescription; + break; + } + } + } + catch (Exception e) + { + HandleError(e); + closeCode = (ushort)CloseStatusCode.Abnormal; + closeReason = e.Message; + } + finally + { + ms.Close(); + } + + HandleClose(closeCode, closeReason); + SocketDispose(); + + Log("Receive Task End !"); + } + + private void SocketDispose() + { + sendQueue.Clear(); + socket.Dispose(); + socket = null; + } + + private void HandleOpen() + { + Log("OnOpen"); +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + HandleEventSync(new OpenEventArgs()); +#else + OnOpen?.Invoke(this, new OpenEventArgs()); +#endif + } + + private void HandleMessage(Opcode opcode, byte[] rawData) + { + Log($"OnMessage, type: {opcode}, size: {rawData.Length}"); +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + HandleEventSync(new MessageEventArgs(opcode, rawData)); +#else + OnMessage?.Invoke(this, new MessageEventArgs(opcode, rawData)); +#endif + } + + private void HandleClose(ushort code, string reason) + { + Log($"OnClose, code: {code}, reason: {reason}"); +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + HandleEventSync(new CloseEventArgs(code, reason)); +#else + OnClose?.Invoke(this, new CloseEventArgs(code, reason)); +#endif + } + + private void HandleError(Exception exception) + { + Log("OnError, error: " + exception.Message); +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + HandleEventSync(new ErrorEventArgs(exception.Message)); +#else + OnError?.Invoke(this, new ErrorEventArgs(exception.Message)); +#endif + } + +#if !UNITY_WEB_SOCKET_ENABLE_ASYNC + private readonly Queue eventQueue = new Queue(); + private readonly object eventQueueLock = new object(); + private void HandleEventSync(EventArgs eventArgs) + { + lock (eventQueueLock) + { + eventQueue.Enqueue(eventArgs); + } + } + + internal void Update() + { + EventArgs e; + while (eventQueue.Count > 0) + { + lock (eventQueueLock) + { + e = eventQueue.Dequeue(); + } + + if (e is CloseEventArgs) + { + OnClose?.Invoke(this, e as CloseEventArgs); + WebSocketManager.Instance.Remove(this); + } + else if (e is OpenEventArgs) + { + OnOpen?.Invoke(this, e as OpenEventArgs); + } + else if (e is MessageEventArgs) + { + OnMessage?.Invoke(this, e as MessageEventArgs); + } + else if (e is ErrorEventArgs) + { + OnError?.Invoke(this, e as ErrorEventArgs); + } + } + } +#endif + + [System.Diagnostics.Conditional("UNITY_WEB_SOCKET_LOG")] + static void Log(string msg) + { + UnityEngine.Debug.Log($"[UnityWebSocket]" + + $"[T-{Thread.CurrentThread.ManagedThreadId:D3}]" + + $"[{DateTime.Now.TimeOfDay}]" + + $" {msg}"); + } + } +} +#endif diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs.meta new file mode 100644 index 00000000..cbb5e53a --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d10f88a23641b4beb8df74460fb7f705 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs new file mode 100644 index 00000000..ee9404c4 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs @@ -0,0 +1,58 @@ +#if !NET_LEGACY && (UNITY_EDITOR || !UNITY_WEBGL) && !UNITY_WEB_SOCKET_ENABLE_ASYNC +using System.Collections.Generic; +using UnityEngine; + +namespace UnityWebSocket +{ + [DefaultExecutionOrder(-10000)] + internal class WebSocketManager : MonoBehaviour + { + private const string rootName = "[UnityWebSocket]"; + private static WebSocketManager _instance; + public static WebSocketManager Instance + { + get + { + if (!_instance) CreateInstance(); + return _instance; + } + } + + private void Awake() + { + DontDestroyOnLoad(gameObject); + } + + public static void CreateInstance() + { + GameObject go = GameObject.Find("/" + rootName); + if (!go) go = new GameObject(rootName); + _instance = go.GetComponent(); + if (!_instance) _instance = go.AddComponent(); + } + + private readonly List sockets = new List(); + + public void Add(WebSocket socket) + { + if (!sockets.Contains(socket)) + sockets.Add(socket); + } + + public void Remove(WebSocket socket) + { + if (sockets.Contains(socket)) + sockets.Remove(socket); + } + + private void Update() + { + if (sockets.Count <= 0) return; + for (int i = sockets.Count - 1; i >= 0; i--) + { + sockets[i].Update(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs.meta new file mode 100644 index 00000000..1e26dc8c --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/NoWebGL/WebSocketManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99157fb5def394c83a9e5342036c92b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL.meta new file mode 100644 index 00000000..e9c4e7b5 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fb37927ec1ce4def9c5e7cff883f9f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs new file mode 100644 index 00000000..a0d1a6e2 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs @@ -0,0 +1,115 @@ +#if !UNITY_EDITOR && UNITY_WEBGL +using System; + +namespace UnityWebSocket +{ + public class WebSocket : IWebSocket + { + public string Address { get; private set; } + public WebSocketState ReadyState { get { return (WebSocketState)WebSocketManager.WebSocketGetState(instanceId); } } + + public event EventHandler OnOpen; + public event EventHandler OnClose; + public event EventHandler OnError; + public event EventHandler OnMessage; + + internal int instanceId = 0; + + public WebSocket(string address) + { + instanceId = WebSocketManager.AllocateInstance(address); + Log($"Allocate socket with instanceId: {instanceId}"); + Address = address; + } + + ~WebSocket() + { + Log($"Free socket with instanceId: {instanceId}"); + WebSocketManager.FreeInstance(instanceId); + } + + public void ConnectAsync() + { + Log($"Connect with instanceId: {instanceId}"); + WebSocketManager.Add(this); + int code = WebSocketManager.WebSocketConnect(instanceId); + if (code < 0) HandleOnError(GetErrorMessageFromCode(code)); + } + + public void CloseAsync() + { + Log($"Close with instanceId: {instanceId}"); + int code = WebSocketManager.WebSocketClose(instanceId, (int)CloseStatusCode.Normal, "Normal Closure"); + if (code < 0) HandleOnError(GetErrorMessageFromCode(code)); + } + + public void SendAsync(string text) + { + Log($"Send, type: {Opcode.Text}, size: {text.Length}"); + int code = WebSocketManager.WebSocketSendStr(instanceId, text); + if (code < 0) HandleOnError(GetErrorMessageFromCode(code)); + } + + public void SendAsync(byte[] data) + { + Log($"Send, type: {Opcode.Binary}, size: {data.Length}"); + int code = WebSocketManager.WebSocketSend(instanceId, data, data.Length); + if (code < 0) HandleOnError(GetErrorMessageFromCode(code)); + } + + internal void HandleOnOpen() + { + Log("OnOpen"); + OnOpen?.Invoke(this, new OpenEventArgs()); + } + + internal void HandleOnMessage(byte[] rawData) + { + Log($"OnMessage, type: {Opcode.Binary}, size: {rawData.Length}"); + OnMessage?.Invoke(this, new MessageEventArgs(Opcode.Binary, rawData)); + } + + internal void HandleOnMessageStr(string data) + { + Log($"OnMessage, type: {Opcode.Text}, size: {data.Length}"); + OnMessage?.Invoke(this, new MessageEventArgs(Opcode.Text, data)); + } + + internal void HandleOnClose(ushort code, string reason) + { + Log($"OnClose, code: {code}, reason: {reason}"); + OnClose?.Invoke(this, new CloseEventArgs(code, reason)); + WebSocketManager.Remove(instanceId); + } + + internal void HandleOnError(string msg) + { + Log("OnError, error: " + msg); + OnError?.Invoke(this, new ErrorEventArgs(msg)); + } + + internal static string GetErrorMessageFromCode(int errorCode) + { + switch (errorCode) + { + case -1: return "WebSocket instance not found."; + case -2: return "WebSocket is already connected or in connecting state."; + case -3: return "WebSocket is not connected."; + case -4: return "WebSocket is already closing."; + case -5: return "WebSocket is already closed."; + case -6: return "WebSocket is not in open state."; + case -7: return "Cannot close WebSocket. An invalid code was specified or reason is too long."; + default: return $"Unknown error code {errorCode}."; + } + } + + [System.Diagnostics.Conditional("UNITY_WEB_SOCKET_LOG")] + static void Log(string msg) + { + UnityEngine.Debug.Log($"[UnityWebSocket]" + + $"[{DateTime.Now.TimeOfDay}]" + + $" {msg}"); + } + } +} +#endif diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs.meta new file mode 100644 index 00000000..ffe47c74 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocket.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 74a5b3c22251243d2a2f33e74741559d +timeCreated: 1466578513 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs new file mode 100644 index 00000000..2903be94 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs @@ -0,0 +1,155 @@ +#if !UNITY_EDITOR && UNITY_WEBGL +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using AOT; + +namespace UnityWebSocket +{ + /// + /// Class providing static access methods to work with JSLIB WebSocket + /// + internal static class WebSocketManager + { + /* Map of websocket instances */ + private static Dictionary sockets = new Dictionary(); + + /* Delegates */ + public delegate void OnOpenCallback(int instanceId); + public delegate void OnMessageCallback(int instanceId, IntPtr msgPtr, int msgSize); + public delegate void OnMessageStrCallback(int instanceId, IntPtr msgStrPtr); + public delegate void OnErrorCallback(int instanceId, IntPtr errorPtr); + public delegate void OnCloseCallback(int instanceId, int closeCode, IntPtr reasonPtr); + + /* WebSocket JSLIB functions */ + [DllImport("__Internal")] + public static extern int WebSocketConnect(int instanceId); + + [DllImport("__Internal")] + public static extern int WebSocketClose(int instanceId, int code, string reason); + + [DllImport("__Internal")] + public static extern int WebSocketSend(int instanceId, byte[] dataPtr, int dataLength); + + [DllImport("__Internal")] + public static extern int WebSocketSendStr(int instanceId, string dataPtr); + + [DllImport("__Internal")] + public static extern int WebSocketGetState(int instanceId); + + /* WebSocket JSLIB callback setters and other functions */ + [DllImport("__Internal")] + public static extern int WebSocketAllocate(string url); + + [DllImport("__Internal")] + public static extern void WebSocketFree(int instanceId); + + [DllImport("__Internal")] + public static extern void WebSocketSetOnOpen(OnOpenCallback callback); + + [DllImport("__Internal")] + public static extern void WebSocketSetOnMessage(OnMessageCallback callback); + + [DllImport("__Internal")] + public static extern void WebSocketSetOnMessageStr(OnMessageStrCallback callback); + + [DllImport("__Internal")] + public static extern void WebSocketSetOnError(OnErrorCallback callback); + + [DllImport("__Internal")] + public static extern void WebSocketSetOnClose(OnCloseCallback callback); + + /* If callbacks was initialized and set */ + private static bool isInitialized = false; + + /* Initialize WebSocket callbacks to JSLIB */ + private static void Initialize() + { + WebSocketSetOnOpen(DelegateOnOpenEvent); + WebSocketSetOnMessage(DelegateOnMessageEvent); + WebSocketSetOnMessageStr(DelegateOnMessageStrEvent); + WebSocketSetOnError(DelegateOnErrorEvent); + WebSocketSetOnClose(DelegateOnCloseEvent); + + isInitialized = true; + } + + [MonoPInvokeCallback(typeof(OnOpenCallback))] + public static void DelegateOnOpenEvent(int instanceId) + { + if (sockets.TryGetValue(instanceId, out var socket)) + { + socket.HandleOnOpen(); + } + } + + [MonoPInvokeCallback(typeof(OnMessageCallback))] + public static void DelegateOnMessageEvent(int instanceId, IntPtr msgPtr, int msgSize) + { + if (sockets.TryGetValue(instanceId, out var socket)) + { + var bytes = new byte[msgSize]; + Marshal.Copy(msgPtr, bytes, 0, msgSize); + socket.HandleOnMessage(bytes); + } + } + + [MonoPInvokeCallback(typeof(OnMessageCallback))] + public static void DelegateOnMessageStrEvent(int instanceId, IntPtr msgStrPtr) + { + if (sockets.TryGetValue(instanceId, out var socket)) + { + string msgStr = Marshal.PtrToStringAuto(msgStrPtr); + socket.HandleOnMessageStr(msgStr); + } + } + + [MonoPInvokeCallback(typeof(OnErrorCallback))] + public static void DelegateOnErrorEvent(int instanceId, IntPtr errorPtr) + { + if (sockets.TryGetValue(instanceId, out var socket)) + { + string errorMsg = Marshal.PtrToStringAuto(errorPtr); + socket.HandleOnError(errorMsg); + } + } + + [MonoPInvokeCallback(typeof(OnCloseCallback))] + public static void DelegateOnCloseEvent(int instanceId, int closeCode, IntPtr reasonPtr) + { + if (sockets.TryGetValue(instanceId, out var socket)) + { + string reason = Marshal.PtrToStringAuto(reasonPtr); + socket.HandleOnClose((ushort)closeCode, reason); + } + } + + internal static int AllocateInstance(string address) + { + if (!isInitialized) Initialize(); + return WebSocketAllocate(address); + } + + internal static void FreeInstance(int instanceId) + { + WebSocketFree(instanceId); + } + + internal static void Add(WebSocket socket) + { + if (!sockets.ContainsKey(socket.instanceId)) + { + sockets.Add(socket.instanceId, socket); + } + } + + internal static void Remove(int instanceId) + { + if (sockets.ContainsKey(instanceId)) + { + sockets.Remove(instanceId); + } + } + } +} +#endif diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs.meta new file mode 100644 index 00000000..d0a16fef --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/Implementation/WebGL/WebSocketManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 246cdc66a1e2047148371a8e56e17d3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef b/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef new file mode 100644 index 00000000..1dd0e569 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef @@ -0,0 +1,12 @@ +{ + "name": "UnityWebSocket.Runtime", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef.meta b/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef.meta new file mode 100644 index 00000000..b25bd684 --- /dev/null +++ b/Assets/Addons/UnityWebSocket/Scripts/Runtime/UnityWebSocket.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b65d8710c3b04373a41cbf6b777ee65 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/BuildMaps.meta b/Assets/BuildMaps.meta new file mode 100644 index 00000000..8a02c310 --- /dev/null +++ b/Assets/BuildMaps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3506af89168299645bd6d604131e347e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/BuildMaps/Bundle.asset b/Assets/BuildMaps/Bundle.asset new file mode 100644 index 00000000..84047ac1 --- /dev/null +++ b/Assets/BuildMaps/Bundle.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f945b6b9257b14549bdeab3606da5cf4, type: 3} + m_Name: Bundle + m_EditorClassIdentifier: + allowCustomBuild: 0 + sourceName: Bundle + providerName: Test + customBuildMaps: [] + _dictBuildBundleInfo: + list: + - Key: Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab + assetBundleName: models/model_01 + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX + assetBundleName: models/model_01_depend + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller + assetBundleName: models/model_01_depend + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat + assetBundleName: models/model_01_depend + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat + assetBundleName: models/model_01_depend + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds + assetBundleName: models/model_01_depend + assetBundleVariant: + - Key: Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga + Value: + assetPath: Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga + assetBundleName: models/model_01_depend + assetBundleVariant: + keyCollision: 0 diff --git a/Assets/BuildMaps/Bundle.asset.meta b/Assets/BuildMaps/Bundle.asset.meta new file mode 100644 index 00000000..f09fcddf --- /dev/null +++ b/Assets/BuildMaps/Bundle.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d039d415b3959524cac53e5f9d442bcf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/InputSystem.inputsettings.asset b/Assets/InputSystem.inputsettings.asset new file mode 100644 index 00000000..3cfbbd99 --- /dev/null +++ b/Assets/InputSystem.inputsettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c46f07b5ed07e4e92aa78254188d3d10, type: 3} + m_Name: InputSystem.inputsettings + m_EditorClassIdentifier: + m_SupportedDevices: + - Keyboard + - Mouse + - Touchscreen + - WebGLGamepad + m_UpdateMode: 1 + m_CompensateForScreenOrientation: 1 + m_FilterNoiseOnCurrent: 0 + m_DefaultDeadzoneMin: 0.125 + m_DefaultDeadzoneMax: 0.925 + m_DefaultButtonPressPoint: 0.5 + m_DefaultTapTime: 0.2 + m_DefaultSlowTapTime: 0.5 + m_DefaultHoldTime: 0.4 + m_TapRadius: 5 + m_MultiTapDelayTime: 0.75 diff --git a/Assets/InputSystem.inputsettings.asset.meta b/Assets/InputSystem.inputsettings.asset.meta new file mode 100644 index 00000000..f1c92d7d --- /dev/null +++ b/Assets/InputSystem.inputsettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5de5598d6dc5bf4e9f516934d1fe2eb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame.meta b/Assets/OxGFrame.meta new file mode 100644 index 00000000..6d75173d --- /dev/null +++ b/Assets/OxGFrame.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 77570a522a8c941419c033111801abb5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader.meta b/Assets/OxGFrame/AssetLoader.meta new file mode 100644 index 00000000..f4608b5f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13442ded9cf4fb949a534c53ab942317 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example.meta b/Assets/OxGFrame/AssetLoader/Example.meta new file mode 100644 index 00000000..fd22e58c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efd579a7d8cc96b4b95f874a54e7c01f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo.meta new file mode 100644 index 00000000..4b3b7466 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b76628d9aa794e459eab42116e9c05c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity new file mode 100644 index 00000000..48f38559 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity @@ -0,0 +1,3661 @@ +%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: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, 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: 0 + 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 &1001660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1001661} + - component: {fileID: 1001664} + - component: {fileID: 1001663} + - component: {fileID: 1001662} + m_Layer: 5 + m_Name: Repair + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1001661 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001660} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 78861258} + m_Father: {fileID: 105452989} + 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: 220, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1001662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001660} + 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: 1001663} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: ShowRepairWindow + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1001663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001660} + 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.05577308, g: 0.6784314, b: 0, 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 &1001664 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001660} + m_CullTransparentMesh: 1 +--- !u!1 &78861257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 78861258} + - component: {fileID: 78861260} + - component: {fileID: 78861259} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &78861258 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 78861257} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1001661} + 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 &78861259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 78861257} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Repair +--- !u!222 &78861260 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 78861257} + m_CullTransparentMesh: 1 +--- !u!1 &105452988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 105452989} + - component: {fileID: 105452991} + - component: {fileID: 105452990} + m_Layer: 5 + m_Name: Btns + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &105452989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105452988} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1433318138} + - {fileID: 2059544989} + - {fileID: 1001661} + m_Father: {fileID: 1355090085} + m_RootOrder: 3 + 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: -172} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &105452990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105452988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &105452991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105452988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 10 + m_Bottom: 10 + m_ChildAlignment: 0 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &139113335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 139113336} + - component: {fileID: 139113338} + - component: {fileID: 139113337} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &139113336 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139113335} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1453373970} + 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 &139113337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139113335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Unload Bundle +--- !u!222 &139113338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139113335} + m_CullTransparentMesh: 1 +--- !u!1 &194734350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 194734351} + - component: {fileID: 194734353} + - component: {fileID: 194734352} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &194734351 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194734350} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 295920461} + 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 &194734352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194734350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Preload Bundle +--- !u!222 &194734353 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194734350} + m_CullTransparentMesh: 1 +--- !u!1 &206526999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 206527000} + - component: {fileID: 206527002} + - component: {fileID: 206527001} + m_Layer: 5 + m_Name: bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &206527000 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206526999} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1211357565} + - {fileID: 1386709199} + m_Father: {fileID: 1406326304} + 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: 349} + m_SizeDelta: {x: 768, y: 242.7} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &206527001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206526999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.54509807} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &206527002 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206526999} + m_CullTransparentMesh: 1 +--- !u!1 &262325706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 262325707} + - component: {fileID: 262325709} + - component: {fileID: 262325708} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &262325707 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262325706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 704920965} + 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.5} +--- !u!114 &262325708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262325706} + 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 &262325709 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262325706} + m_CullTransparentMesh: 1 +--- !u!1 &295920460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 295920461} + - component: {fileID: 295920464} + - component: {fileID: 295920463} + - component: {fileID: 295920462} + m_Layer: 5 + m_Name: PreloadBundle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &295920461 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 295920460} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 194734351} + m_Father: {fileID: 1285464958} + 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.5, y: 0.5} +--- !u!114 &295920462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 295920460} + 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: 295920463} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: PreloadBundle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &295920463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 295920460} + 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.09803922, g: 0.71690035, b: 0.81960785, 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 &295920464 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 295920460} + m_CullTransparentMesh: 1 +--- !u!1 &371699106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371699107} + - component: {fileID: 371699110} + - component: {fileID: 371699109} + - component: {fileID: 371699108} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &371699107 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371699106} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 691132784} + m_Father: {fileID: 1437107146} + m_RootOrder: 1 + 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: -69} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &371699108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371699106} + 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: 371699109} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: RetryDownload + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &371699109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371699106} + 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.44458282, g: 0.7264151, b: 0.19530971, 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 &371699110 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371699106} + m_CullTransparentMesh: 1 +--- !u!1 &393437658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 393437659} + - component: {fileID: 393437661} + - component: {fileID: 393437660} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &393437659 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393437658} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1397944735} + 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 &393437660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393437658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Load Bundle +--- !u!222 &393437661 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393437658} + m_CullTransparentMesh: 1 +--- !u!1 &405539405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 405539408} + - component: {fileID: 405539407} + - component: {fileID: 405539406} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &405539406 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405539405} + m_Enabled: 1 +--- !u!20 &405539407 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405539405} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 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 &405539408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405539405} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &532841556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 532841557} + - component: {fileID: 532841560} + - component: {fileID: 532841559} + - component: {fileID: 532841558} + m_Layer: 5 + m_Name: percentage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &532841557 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532841556} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1351195585} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 999, y: -50} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &532841558 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532841556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &532841559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532841556} + 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, g: 0, b: 0, 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: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0% +--- !u!222 &532841560 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532841556} + m_CullTransparentMesh: 1 +--- !u!1 &571322897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 571322898} + - component: {fileID: 571322900} + - component: {fileID: 571322899} + - component: {fileID: 571322901} + m_Layer: 5 + m_Name: Msg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &571322898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571322897} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1355090085} + 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: 163} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &571322899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571322897} + 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, g: 0, b: 0, 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Click to start check update +--- !u!222 &571322900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571322897} + m_CullTransparentMesh: 1 +--- !u!114 &571322901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571322897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &691132783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 691132784} + - component: {fileID: 691132786} + - component: {fileID: 691132785} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &691132784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691132783} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 371699107} + 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 &691132785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691132783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Retry +--- !u!222 &691132786 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691132783} + m_CullTransparentMesh: 1 +--- !u!1 &704920964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 704920965} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &704920965 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 704920964} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 262325707} + m_Father: {fileID: 811121317} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &761628990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761628991} + - component: {fileID: 761628994} + - component: {fileID: 761628993} + - component: {fileID: 761628992} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &761628991 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761628990} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1437107146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -88} + m_SizeDelta: {x: 324, y: 113} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &761628992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761628990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &761628993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761628990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Network Error! + + Retry Again?' +--- !u!222 &761628994 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761628990} + m_CullTransparentMesh: 1 +--- !u!1 &811121316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 811121317} + - component: {fileID: 811121320} + - component: {fileID: 811121319} + - component: {fileID: 811121318} + m_Layer: 5 + m_Name: bar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &811121317 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811121316} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.5, y: 1.5, z: 1.5} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 704920965} + m_Father: {fileID: 1351195585} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 93, y: -50} + m_SizeDelta: {x: 500, y: 20} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &811121318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811121316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 0 + 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: 0 + m_TargetGraphic: {fileID: 262325708} + m_HandleRect: {fileID: 262325707} + m_Direction: 0 + m_Value: 0 + m_Size: 0 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &811121319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811121316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 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: 10907, 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 &811121320 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811121316} + m_CullTransparentMesh: 1 +--- !u!1 &898145738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 898145739} + - component: {fileID: 898145741} + - component: {fileID: 898145740} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &898145739 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898145738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1097837208} + 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 &898145740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898145738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Release Cached +--- !u!222 &898145741 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898145738} + m_CullTransparentMesh: 1 +--- !u!1 &974351903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974351904} + - component: {fileID: 974351906} + - component: {fileID: 974351905} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &974351904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974351903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1433318138} + 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 &974351905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974351903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Start Check +--- !u!222 &974351906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974351903} + m_CullTransparentMesh: 1 +--- !u!1 &1097837207 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1097837208} + - component: {fileID: 1097837211} + - component: {fileID: 1097837210} + - component: {fileID: 1097837209} + m_Layer: 5 + m_Name: ReleaseBundle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1097837208 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097837207} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 898145739} + m_Father: {fileID: 1285464958} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1097837209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097837207} + 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: 1097837210} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: ReleaseBundle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1097837210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097837207} + 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: 0, b: 0.23735619, 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 &1097837211 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097837207} + m_CullTransparentMesh: 1 +--- !u!1 &1155732412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1155732415} + - component: {fileID: 1155732414} + - component: {fileID: 1155732413} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1155732413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1155732412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 +--- !u!114 &1155732414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1155732412} + 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!4 &1155732415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1155732412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1211357564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1211357565} + - component: {fileID: 1211357568} + - component: {fileID: 1211357567} + - component: {fileID: 1211357566} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1211357565 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211357564} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 206527000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -88} + m_SizeDelta: {x: 509, y: 113} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1211357566 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211357564} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1211357567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211357564} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Will delete all data. + + Try to download again.' +--- !u!222 &1211357568 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211357564} + m_CullTransparentMesh: 1 +--- !u!1 &1248583928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1248583929} + - component: {fileID: 1248583931} + - component: {fileID: 1248583930} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1248583929 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248583928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1386709199} + 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 &1248583930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248583928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Yes +--- !u!222 &1248583931 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248583928} + m_CullTransparentMesh: 1 +--- !u!1 &1285464955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1285464958} + - component: {fileID: 1285464956} + - component: {fileID: 1285464957} + m_Layer: 5 + m_Name: BundleBtns + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1285464956 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285464955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1285464957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285464955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 360, y: 70} + m_Spacing: {x: 35, y: 25} + m_Constraint: 1 + m_ConstraintCount: 1 +--- !u!224 &1285464958 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285464955} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 295920461} + - {fileID: 1397944735} + - {fileID: 1453373970} + - {fileID: 1097837208} + - {fileID: 1550743426} + m_Father: {fileID: 1355090085} + m_RootOrder: 6 + 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: -580} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1351195584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1351195585} + m_Layer: 5 + m_Name: Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1351195585 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1351195584} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 811121317} + - {fileID: 532841557} + m_Father: {fileID: 1355090085} + m_RootOrder: 4 + 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: 41} + m_SizeDelta: {x: 1080, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1355090081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1355090085} + - component: {fileID: 1355090084} + - component: {fileID: 1355090083} + - component: {fileID: 1355090082} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1355090082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355090081} + 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 &1355090083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355090081} + 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 &1355090084 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355090081} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1355090085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355090081} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 571322898} + - {fileID: 1497679539} + - {fileID: 1406326304} + - {fileID: 105452989} + - {fileID: 1351195585} + - {fileID: 1678907722} + - {fileID: 1285464958} + m_Father: {fileID: 0} + 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: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1386709198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1386709199} + - component: {fileID: 1386709202} + - component: {fileID: 1386709201} + - component: {fileID: 1386709200} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1386709199 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386709198} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1248583929} + m_Father: {fileID: 206527000} + m_RootOrder: 1 + 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: -69} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1386709200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386709198} + 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: 1386709201} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: RepairBundle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1386709201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386709198} + 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.44458282, g: 0.7264151, b: 0.19530971, 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 &1386709202 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386709198} + m_CullTransparentMesh: 1 +--- !u!1 &1397944734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1397944735} + - component: {fileID: 1397944738} + - component: {fileID: 1397944737} + - component: {fileID: 1397944736} + m_Layer: 5 + m_Name: LoadBundle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1397944735 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1397944734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 393437659} + m_Father: {fileID: 1285464958} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1397944736 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1397944734} + 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: 1397944737} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: LoadBundle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1397944737 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1397944734} + 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.096787095, g: 0.30354548, b: 0.8207547, 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 &1397944738 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1397944734} + m_CullTransparentMesh: 1 +--- !u!1 &1406326303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1406326304} + m_Layer: 5 + m_Name: RepairWindow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1406326304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406326303} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 206527000} + m_Father: {fileID: 1355090085} + 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: 41} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1433318137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1433318138} + - component: {fileID: 1433318141} + - component: {fileID: 1433318140} + - component: {fileID: 1433318139} + m_Layer: 5 + m_Name: StartCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1433318138 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433318137} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 974351904} + m_Father: {fileID: 105452989} + 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: 220, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1433318139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433318137} + 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: 1433318140} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: StartExecute + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1433318140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433318137} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6792453, b: 0.65090823, 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 &1433318141 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433318137} + m_CullTransparentMesh: 1 +--- !u!1 &1437107145 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437107146} + - component: {fileID: 1437107148} + - component: {fileID: 1437107147} + m_Layer: 5 + m_Name: bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1437107146 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437107145} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 761628991} + - {fileID: 371699107} + m_Father: {fileID: 1497679539} + 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: 349} + m_SizeDelta: {x: 768, y: 242.7} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1437107147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437107145} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.54509807} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1437107148 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437107145} + m_CullTransparentMesh: 1 +--- !u!1 &1453373969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1453373970} + - component: {fileID: 1453373973} + - component: {fileID: 1453373972} + - component: {fileID: 1453373971} + m_Layer: 5 + m_Name: UnloadBundle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1453373970 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453373969} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 139113336} + m_Father: {fileID: 1285464958} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1453373971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453373969} + 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: 1453373972} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: UnloadBundle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1453373972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453373969} + 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.64739895, g: 0, 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 &1453373973 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453373969} + m_CullTransparentMesh: 1 +--- !u!1 &1497679538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1497679539} + m_Layer: 5 + m_Name: RetryDownload + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1497679539 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497679538} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1437107146} + m_Father: {fileID: 1355090085} + m_RootOrder: 1 + 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: 41} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1499200397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1499200398} + - component: {fileID: 1499200400} + - component: {fileID: 1499200399} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1499200398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499200397} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2059544989} + 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 &1499200399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499200397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Stop +--- !u!222 &1499200400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499200397} + m_CullTransparentMesh: 1 +--- !u!1 &1550743425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1550743426} + - component: {fileID: 1550743429} + - component: {fileID: 1550743428} + - component: {fileID: 1550743427} + m_Layer: 5 + m_Name: ReleaseDesc + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1550743426 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1550743425} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1285464958} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1550743427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1550743425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1550743428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1550743425} + 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.19607843, g: 0.19607843, b: 0.19607843, 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: 29 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 68 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: all objects that were loaded from this bundle will be destroyed as well +--- !u!222 &1550743429 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1550743425} + m_CullTransparentMesh: 1 +--- !u!1 &1678907721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1678907722} + - component: {fileID: 1678907725} + - component: {fileID: 1678907724} + - component: {fileID: 1678907723} + m_Layer: 5 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1678907722 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678907721} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1355090085} + m_RootOrder: 5 + 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: -40} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1678907723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678907721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1678907724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678907721} + 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, g: 0, b: 0, 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: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Patch Size: 00, 00 (DC) / 00 (PC) + + Download Size: 00MB , Download + Speed: 00 /s' +--- !u!222 &1678907725 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678907721} + m_CullTransparentMesh: 1 +--- !u!1 &1769063047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1769063048} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1769063048 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1769063047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.65, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1917474897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1917474899} + - component: {fileID: 1917474898} + m_Layer: 0 + m_Name: BundleDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1917474898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1917474897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b61fb42e2d30e24b9d7b3355fd922a6, type: 3} + m_Name: + m_EditorClassIdentifier: + msg: {fileID: 571322899} + retryWindow: {fileID: 1497679538} + progress: {fileID: 811121318} + percentage: {fileID: 532841559} + info: {fileID: 1678907724} + bundleBtns: {fileID: 1285464955} + fixWindow: {fileID: 1406326303} + bundleName: models/model_01 + assetName: model_01 + container: {fileID: 1769063047} +--- !u!4 &1917474899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1917474897} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2059544988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059544989} + - component: {fileID: 2059544992} + - component: {fileID: 2059544991} + - component: {fileID: 2059544990} + m_Layer: 5 + m_Name: Stop + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2059544989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059544988} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1499200398} + m_Father: {fileID: 105452989} + 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: 220, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2059544990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059544988} + 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: 2059544991} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1917474898} + m_TargetAssemblyTypeName: BundleDemo, Assembly-CSharp + m_MethodName: StopDownload + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2059544991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059544988} + 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.6784314, g: 0, b: 0.12988092, 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 &2059544992 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059544988} + m_CullTransparentMesh: 1 diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity.meta new file mode 100644 index 00000000..80ce0210 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/BundleDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5648aa95b7111a54198733f86df587a8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts.meta new file mode 100644 index 00000000..be55212c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f92d648fccfcc704ebad324318b1e227 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs new file mode 100644 index 00000000..90c096d4 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs @@ -0,0 +1,234 @@ +using AssetLoader.Bundle; +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEngine.UI; + +public class BundleDemo : MonoBehaviour +{ + public Text msg = null; + public GameObject retryWindow = null; + public Scrollbar progress = null; + public Text percentage = null; + public Text info = null; + public GameObject bundleBtns = null; + public GameObject fixWindow = null; + + private bool _isStart = false; + private bool _isStopDownload = false; + + private void Awake() + { + //BundleConfig.InitCryptogram("Xor, 123"); + BundleConfig.InitCryptogram("offset, 64"); + } + + public void Start() + { + this.progress.size = 0; + this.info.text = string.Empty; + this.bundleBtns.SetActive(false); + } + + private void Update() + { + if (!this._isStart) return; + + var status = BundleDistributor.GetInstance().executeStatus; + switch (status) + { + // 正在從服務器下載配置文件 + case BundleDistributor.ExecuteStatus.DOWLOADING_CONFIG: + this.msg.text = "Check Update\nDownloading config from server."; + break; + // 服務器請求錯誤 (連接錯誤) + case BundleDistributor.ExecuteStatus.SERVER_REQUEST_ERROR: + this.msg.text = "Server Request Error!!!"; + break; + // 正在處理中... + case BundleDistributor.ExecuteStatus.PROCESSING: + this.msg.text = "Check Update\nProcessing..."; + break; + // 主程式版本不一致 + case BundleDistributor.ExecuteStatus.APP_VERSION_INCONSISTENT: + this.msg.text = "Application version inconsistent.\nPlease go to AppStore to Download!"; + break; + // 無需更新資源 + case BundleDistributor.ExecuteStatus.NO_NEED_TO_UPDATE_PATCH: + this.msg.text = "No need to update."; + break; + // 檢查更新包 + case BundleDistributor.ExecuteStatus.CHECKING_PATCH: + this.msg.text = "Checking patch..."; + break; + // 下載更新包 + case BundleDistributor.ExecuteStatus.DOWNLOAD_PATH: + this.msg.text = "Downloading patch..."; + break; + // 寫入配置文件 + case BundleDistributor.ExecuteStatus.WRITE_CONFIG: + this.msg.text = "Processing config..."; + break; + // 完成更新配置文件 + case BundleDistributor.ExecuteStatus.COMPLETE_UPDATE_CONFIG: + this.msg.text = "Update config successfully."; + break; + + // AssetDatabase Mode (無需執行更新) + case BundleDistributor.ExecuteStatus.ASSET_DATABASE_MODE: + this.msg.text = "AssetDatabase Mode"; + break; + } + + if (BundleDistributor.GetInstance().GetDownloader().IsRetryDownload()) + { + if (!this.retryWindow.gameObject.activeSelf) this.retryWindow.gameObject.SetActive(true); + } + + this._UpdateProgress(); + + switch (status) + { + case BundleDistributor.ExecuteStatus.NONE: + case BundleDistributor.ExecuteStatus.DOWLOADING_CONFIG: + case BundleDistributor.ExecuteStatus.PROCESSING: + case BundleDistributor.ExecuteStatus.APP_VERSION_INCONSISTENT: + this.info.text = string.Empty; + break; + + case BundleDistributor.ExecuteStatus.NO_NEED_TO_UPDATE_PATCH: + case BundleDistributor.ExecuteStatus.ASSET_DATABASE_MODE: + this.info.text = string.Empty; + this._isStart = false; + break; + } + + switch (status) + { + case BundleDistributor.ExecuteStatus.NO_NEED_TO_UPDATE_PATCH: + case BundleDistributor.ExecuteStatus.ASSET_DATABASE_MODE: + if (!this.bundleBtns.activeSelf) this.bundleBtns.SetActive(true); + break; + default: + if (this.bundleBtns.activeSelf) this.bundleBtns.SetActive(false); + break; + } + } + + private void _UpdateProgress() + { + this.progress.size = BundleDistributor.GetInstance().GetDownloader().dlProgress; + this.percentage.text = (BundleDistributor.GetInstance().GetDownloader().dlProgress * 100).ToString("f0") + "%"; + } + + private void _UpdateDownloadInfo(float progress, int dlCount, string dlSize, string dlSpeed) + { + var strBuilder = new StringBuilder(); + strBuilder.Append($"Patch Size: {BundleDistributor.GetInstance().GetUpdateTotalSizeToString(BundleDistributor.GetInstance().GetUpdateCfg())}"); + strBuilder.Append($", {dlCount} (DC) / {BundleDistributor.GetInstance().GetUpdateCount(BundleDistributor.GetInstance().GetUpdateCfg())} (PC)"); + strBuilder.Append($"\nDownload Size: {dlSize}, Download Speed: {dlSpeed}"); + this.info.text = strBuilder.ToString(); + + //Patch Size: 00, 00(DC) / 00(PC) + //Download Size: 00MB , Download Speed: 00 / s + } + + private void _Complete() + { + Debug.Log("Complete Callback!!!"); + } + + public void StartExecute() + { + this._isStart = true; + + if (!this._isStopDownload) BundleDistributor.GetInstance().Check(this._Complete, this._UpdateDownloadInfo); + else BundleDistributor.GetInstance().ContinueDownload(); + } + + public void RetryDownload() + { + BundleDistributor.GetInstance().RetryDownload(); + this.retryWindow.gameObject.SetActive(false); + } + + public void StopDownload() + { + BundleDistributor.GetInstance().StopDownload(); + this._isStopDownload = true; + } + + public void ShowRepairWindow() + { + if (!this.fixWindow.activeSelf) this.fixWindow.SetActive(true); + } + + public void RepairBundle() + { + this._isStart = true; + + BundleDistributor.GetInstance().Repair(this._Complete, this._UpdateDownloadInfo); + + if (this.fixWindow.activeSelf) this.fixWindow.SetActive(false); + } + + public void GoToAppStore() + { + BundleDistributor.GetInstance().GoToAppStore(); + } + + [Header("BundleInfo")] + public string bundleName = ""; + public string assetName = ""; + public GameObject container = null; + private int _taskId = 9453; + + public async void PreloadBundle() + { + await KeyBundle.GetInstance().PreloadInCache(this._taskId, this.bundleName); + } + + public async void LoadBundle() + { + // 方法一. 直接CacheBundle進行加載 (【自行】實例化) + GameObject go = await CacheBundle.GetInstance().Load(this.bundleName, this.assetName); + if (go != null) Instantiate(go, this.container.transform); + + // 方法二. 透過KeyBundle連動Key進行加載 (【自行】實例化) + //GameObject go = await KeyBundle.GetInstance().Load(this._taskId, this.bundleName, this.assetName); + //if (go != null) Instantiate(go, this.container.transform); + + // 方法三. 透過KeyBundle連動Key進行加載 (【自動】實例化) + //await KeyBundle.GetInstance().LoadWithClone(this._taskId, this.bundleName, this.assetName, this.container.transform, 1.1f); + } + + public void UnloadBundle() + { + foreach (Transform t in this.container.transform) + { + Destroy(t.gameObject); + + // 方法一. 直接CacheBundle進行單個移除 + CacheBundle.GetInstance().ReleaseFromCache(this.bundleName); + + // 方法二. 透過KeyBundle連動Key進行單個移除 + //KeyBundle.GetInstance().ReleaseFromCache(this._taskId, this.bundleName); + } + } + + public void ReleaseBundle() + { + foreach (Transform t in this.container.transform) + { + Destroy(t.gameObject); + } + + // 方法一. 直接CacheBundle進行全部釋放 + CacheBundle.GetInstance().ReleaseCache(); + + // 方法二. 透過KeyBundle連動Key進行全部釋放 + //KeyBundle.GetInstance().ReleaseCache(this._taskId); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs.meta new file mode 100644 index 00000000..da34ef4f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/Scripts/BundleDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b61fb42e2d30e24b9d7b3355fd922a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg new file mode 100644 index 00000000..e5078ca6 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg @@ -0,0 +1 @@ +{"PRODUCT_NAME":"unity_framework","APP_VERSION":"1.0.0.0","RES_VERSION":"1.0.0.0<1649828790>","EXPORT_NAME":"20220413134630","RES_FILES":{}} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg.meta new file mode 100644 index 00000000..4944c818 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/b_cfg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0adaa7d9fb848ce4fb059fecbcffc020 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt new file mode 100644 index 00000000..946eb0d2 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt @@ -0,0 +1,7 @@ +#bundle_ip = 資源伺服器IP +#google_store = GooglePlay主程式商店Link +#apple_store = Apple主程式商店Link + +bundle_ip 192.168.1.142 +google_store market://details?id=YOUR_ID +apple_store itms-apps://itunes.apple.com/app/idYOUR_ID \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt.meta b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt.meta new file mode 100644 index 00000000..d7b43f43 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/BundleDemo/bundle_cfg.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fe5b24c65e81a7d4194934d11f169d5b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model.meta b/Assets/OxGFrame/AssetLoader/Example/Model.meta new file mode 100644 index 00000000..a623db0a --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 247526c33e5a60e408a2502a8878ffc9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller b/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller new file mode 100644 index 00000000..220ab371 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller @@ -0,0 +1,73 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-5588649385611037305 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: -5252816984213320552, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-1064920267160476155 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -5588649385611037305} + m_Position: {x: 190, y: 250, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -5588649385611037305} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IceDevil_AnimatorController + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -1064920267160476155} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller.meta b/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller.meta new file mode 100644 index 00000000..adce17b1 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/IceDevil_AnimatorController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec5f21088edcd5c41b6c87ea82b75077 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/Materials.meta b/Assets/OxGFrame/AssetLoader/Example/Model/Materials.meta new file mode 100644 index 00000000..b77b54c4 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57ab58560593c204d92572fdf3970841 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat new file mode 100644 index 00000000..e775ba94 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: nideer + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: b1a84d2c498c9bf49a43907ea6d8c165, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat.meta b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat.meta new file mode 100644 index 00000000..4e5439fd --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e48968840b9802d418c109278ca55ba5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat new file mode 100644 index 00000000..7f1261a6 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: nideer_sm + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 960edaa32b567c245887db1ed97f5e90, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat.meta b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat.meta new file mode 100644 index 00000000..88d6c45f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/Materials/nideer_sm.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 14ff9ee012586dc4f86d5553cc4aeeb4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX b/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX new file mode 100644 index 00000000..58c863e0 Binary files /dev/null and b/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX differ diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX.meta b/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX.meta new file mode 100644 index 00000000..679b9e79 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/ice_devil.FBX.meta @@ -0,0 +1,810 @@ +fileFormatVersion: 2 +guid: 4ce48ea5c8941c44982fa761ffc41b6f +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 + - first: + 74: -5252816984213320552 + second: idle + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 1 + materialSearch: 1 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Take 001 + takeName: Take 001 + internalID: 0 + firstFrame: 0 + lastFrame: 467 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: idle + takeName: Take 001 + internalID: 0 + firstFrame: 20 + lastFrame: 80 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 + importBlendShapes: 0 + importCameras: 0 + importLights: 0 + nodeNameCollisionStrategy: 0 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: + - name: ice_devil(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0.0000011811817, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Particle View 01 + parentName: ice_devil(Clone) + position: {x: -0.31805405, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particle View 01 1 + parentName: ice_devil(Clone) + position: {x: -0.31805405, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particle View 02 + parentName: ice_devil(Clone) + position: {x: 0.75967306, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particle View 01 2 + parentName: ice_devil(Clone) + position: {x: -0.31805405, y: 0.012490196, z: -0.032041684} + rotation: {x: 0.00000019973709, y: -0, z: -0, w: 1} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particlde View 01 + parentName: ice_devil(Clone) + position: {x: -0.6184033, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particled View 01 + parentName: ice_devil(Clone) + position: {x: -0.6184033, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Particdle View 02 + parentName: ice_devil(Clone) + position: {x: 0.45932373, y: 0.012490196, z: -0.032041684} + rotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071069} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Pardticle View 01 + parentName: ice_devil(Clone) + position: {x: -0.6184033, y: 0.012490196, z: -0.032041684} + rotation: {x: 0.00000019973709, y: -0, z: -0, w: 1} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Object15 + parentName: ice_devil(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: -0.7071068, y: -0.000000021424185, z: -0.000000021424185, w: 0.7071068} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Dummy18 + parentName: ice_devil(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 0.01, y: 0.01, z: 0.01} + - name: Bip01 + parentName: Dummy18 + position: {x: -0.000005405426, y: -1.1939926, z: 106.22783} + rotation: {x: 0, y: 0, z: 0.70710635, w: 0.7071072} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 Footsteps + parentName: Bip01 + position: {x: -0, y: 0, z: -108.05107} + rotation: {x: 0, y: -0, z: -0.70710635, w: 0.7071072} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 Pelvis + parentName: Bip01 + position: {x: 1.9237322, y: -0.000002861023, z: -9.376038} + rotation: {x: 0.5, y: -0.5, z: -0.5, w: -0.5} + scale: {x: 0.9999998, y: 1, z: 1} + - name: Bip01 Spine + parentName: Bip01 Pelvis + position: {x: -12.199127, y: -0.009790063, z: 0.000016931313} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1, z: 0.99999994} + - name: Bip01 L Thigh + parentName: Bip01 Spine + position: {x: 12.199112, y: 0.019485235, z: 8.601693} + rotation: {x: 0, y: 1, z: 0, w: -0.00000004371139} + scale: {x: 1.0000005, y: 1.0000008, z: 1.0000005} + - name: Bip01 L Calf + parentName: Bip01 L Thigh + position: {x: -43.037926, y: -0.00000023841858, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.99999964, y: 0.99999934, z: 0.99999976} + - name: Bip01 L Foot + parentName: Bip01 L Calf + position: {x: -41.0942, y: 0.0000019073486, z: 0.0000009536743} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 0.99999994, z: 1} + - name: Bip01 L Toe0 + parentName: Bip01 L Foot + position: {x: -9.898727, y: 15.595112, z: 0} + rotation: {x: 0, y: 0, z: 0.7071068, w: -0.7071068} + scale: {x: 1.0000006, y: 1.0000001, z: 1.0000002} + - name: Bip01 L Toe0Nub + parentName: Bip01 L Toe0 + position: {x: -9.3439865, y: 0.0000009536743, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: -1, y: -1, z: -1} + - name: Bip01 R Thigh + parentName: Bip01 Spine + position: {x: 12.199112, y: 0.019532919, z: -8.601693} + rotation: {x: 0, y: 1, z: 0, w: -0.00000004371139} + scale: {x: 0.99999994, y: 1.0000005, z: 1} + - name: Bip01 R Calf + parentName: Bip01 R Thigh + position: {x: -43.037926, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 0.9999999} + - name: Bip01 R Foot + parentName: Bip01 R Calf + position: {x: -41.0942, y: 0.0000019073486, z: -0.0000009536743} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: Bip01 R Toe0 + parentName: Bip01 R Foot + position: {x: -9.898729, y: 15.595114, z: 0} + rotation: {x: 0, y: 0, z: 0.7071068, w: -0.7071068} + scale: {x: 1.0000006, y: 1.0000004, z: 1.0000005} + - name: Bip01 R Toe0Nub + parentName: Bip01 R Toe0 + position: {x: -9.3439865, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: Bip01 Spine1 + parentName: Bip01 Spine + position: {x: -12.296982, y: -0.017272115, z: -0.000000047106028} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999999, y: 1.0000001, z: 1.0000002} + - name: Bip01 Neck + parentName: Bip01 Spine1 + position: {x: -22.069252, y: 0.7475567, z: -0.00000041957537} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 Head + parentName: Bip01 Neck + position: {x: -7.1627045, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: Bip01 HeadNub + parentName: Bip01 Head + position: {x: -18.872116, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: bone00 + parentName: Bip01 Head + position: {x: -11.785626, y: 0.3999176, z: 0.000015258789} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 0.9999999, z: 1.0000001} + - name: bone01 + parentName: bone00 + position: {x: -12.970092, y: 0.000015190413, z: -0.0000014272266} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 L Clavicle + parentName: Bip01 Neck + position: {x: 2.8436127, y: 1.6573563, z: 1.6979207} + rotation: {x: 0.7071068, y: -0.000000030908623, z: -0.7071068, w: 0.000000030908623} + scale: {x: 0.99999976, y: 1, z: 1.0000001} + - name: Bip01 L UpperArm + parentName: Bip01 L Clavicle + position: {x: -12.493427, y: 0, z: -0.000015258789} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000006, y: 1.0000008, z: 1.0000007} + - name: Bip01 L Forearm + parentName: Bip01 L UpperArm + position: {x: -21.173615, y: 0, z: 0.0000076293945} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999997, y: 0.9999998, z: 0.9999999} + - name: Bip01 L Hand + parentName: Bip01 L Forearm + position: {x: -23.206093, y: 0.00000047683716, z: -0.0000076293945} + rotation: {x: 0.7071068, y: 0, z: 0, w: -0.7071068} + scale: {x: 1.0000001, y: 0.9999995, z: 0.99999946} + - name: Bip01 L Finger0 + parentName: Bip01 L Hand + position: {x: -4.0270386, y: 1.236496, z: -2.4171824} + rotation: {x: 0, y: 0.3826835, z: 0, w: -0.9238795} + scale: {x: 1.0000002, y: 1.0000001, z: 0.99999994} + - name: Bip01 L Finger01 + parentName: Bip01 L Finger0 + position: {x: -4.0900574, y: 0.0000076293945, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1.0000004, z: 0.9999998} + - name: Bip01 L Finger0Nub + parentName: Bip01 L Finger01 + position: {x: -3.4658966, y: -0.0000019073486, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 L Finger1 + parentName: Bip01 L Hand + position: {x: -8.503433, y: 0, z: 0.00000047683716} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1.0000001, z: 1.0000007} + - name: Bip01 L Finger11 + parentName: Bip01 L Finger1 + position: {x: -4.713745, y: 0, z: 0.00000047683716} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999997, y: 0.9999999, z: 0.99999946} + - name: Bip01 L Finger1Nub + parentName: Bip01 L Finger11 + position: {x: -4.9457245, y: -0.0000019073486, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Bip01 R Clavicle + parentName: Bip01 Neck + position: {x: 2.8436127, y: 1.6573658, z: -1.6979023} + rotation: {x: 0.7071068, y: -0.000000030908623, z: 0.7071068, w: -0.000000030908623} + scale: {x: 0.99999946, y: 0.99999976, z: 0.9999998} + - name: Bip01 R UpperArm + parentName: Bip01 R Clavicle + position: {x: -12.493431, y: 0.0000038146973, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000008, y: 1.0000002, z: 1.0000008} + - name: Bip01 R Forearm + parentName: Bip01 R UpperArm + position: {x: -21.173607, y: -0.0000009536743, z: 0.0000076293945} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1.0000001} + - name: Bip01 R Hand + parentName: Bip01 R Forearm + position: {x: -23.206085, y: -0.00000047683716, z: 0} + rotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + scale: {x: 1, y: 0.9999999, z: 0.99999994} + - name: Bip01 R Finger0 + parentName: Bip01 R Hand + position: {x: -4.027046, y: 1.2365036, z: 2.417183} + rotation: {x: 0, y: 0.38268346, z: 0, w: 0.9238795} + scale: {x: 0.9999998, y: 1.0000001, z: 1.0000007} + - name: Bip01 R Finger01 + parentName: Bip01 R Finger0 + position: {x: -4.090065, y: 0.0000038146973, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999998, y: 1, z: 0.9999995} + - name: Bip01 R Finger0Nub + parentName: Bip01 R Finger01 + position: {x: -3.4658966, y: -0.0000019073486, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: -0.9999999, y: -0.9999999, z: -0.99999994} + - name: Bip01 R Finger1 + parentName: Bip01 R Hand + position: {x: -8.503441, y: 0, z: 0.0000009536743} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.99999976, y: 0.99999964, z: 0.9999998} + - name: Bip01 R Finger11 + parentName: Bip01 R Finger1 + position: {x: -4.713745, y: 0.0000076293945, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1, z: 1.0000001} + - name: Bip01 R Finger1Nub + parentName: Bip01 R Finger11 + position: {x: -4.9457245, y: -0.0000038146973, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: -1, y: -1, z: -1} + - name: bone02 + parentName: Bip01 Pelvis + position: {x: -0.88347864, y: 2.6707573, z: 14.008423} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.99999994, y: 1.0000005, z: 1.0000002} + - name: bone03 + parentName: bone02 + position: {x: -35.861824, y: -0.0000012823755, z: -0.0000010871986} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + - name: bone04 + parentName: bone03 + position: {x: -28.738234, y: -0.000010645742, z: -0.000000030979663} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000006, y: 1.0000007, z: 1} + - name: bone05 + parentName: bone04 + position: {x: -29.045965, y: -0.000005056723, z: 0.0000016482031} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: bone06 + parentName: Bip01 Pelvis + position: {x: -0.88352394, y: 2.670681, z: -14.263603} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 0.9999996} + - name: bone07 + parentName: bone06 + position: {x: -35.861816, y: 0.000012397766, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1.0000004, z: 1.0000001} + - name: bone08 + parentName: bone07 + position: {x: -28.738235, y: 0.000015258789, z: 0.0000076293945} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1.0000002, z: 1} + - name: bone09 + parentName: bone08 + position: {x: -29.045975, y: 0.0000038146973, z: 0.0000038146973} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 0.99999976} + - name: bone10 + parentName: Bip01 Pelvis + position: {x: -4.562806, y: -13.241043, z: 0.000045776367} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000005, y: 1.0000004, z: 1} + - name: bone11 + parentName: bone10 + position: {x: -38.746895, y: -0.0000015771876, z: 0.0000021414653} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000001, y: 1, z: 1.0000001} + - name: bone12 + parentName: bone11 + position: {x: -34.985096, y: -0.000008549179, z: 0.0000019843078} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1.0000002, y: 1.0000005, z: 1} + - name: bone13 + parentName: bone12 + position: {x: -28.751284, y: -0.0000064558026, z: 0.0000017396313} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Dummy17 + parentName: Dummy18 + position: {x: -0.0000039955926, y: 19.406307, z: 148.81805} + rotation: {x: 0.6240991, y: 0.33241597, z: 0.6240991, w: 0.33241588} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: bone14 + parentName: Dummy17 + position: {x: -21.930645, y: 1.44628, z: -97.91709} + rotation: {x: -0.25526237, y: -0.6624034, z: -0.15576652, w: 0.6868768} + scale: {x: 1.0000001, y: 0.99999946, z: 0.99999994} + - name: Dummy14 + parentName: bone14 + position: {x: -32.552948, y: 0.005905807, z: 0.00030517578} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1.0000001, z: 0.99999994} + - name: bone15 + parentName: Dummy14 + position: {x: 4.8518066, y: -3.8511274, z: -0.00030517578} + rotation: {x: 0.00000013411044, y: -0.00000008940696, z: -0.11478573, w: 0.9933903} + scale: {x: 1, y: 1.0000002, z: 0.99999994} + - name: bone16 + parentName: bone15 + position: {x: -22.138567, y: -0.000001132601, z: -0.000000021098503} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: bone17 + parentName: Dummy17 + position: {x: -58.506077, y: -18.279896, z: -89.00511} + rotation: {x: -0.4527018, y: -0.4856866, z: 0.060331486, w: 0.74533874} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: Dummy16 + parentName: bone17 + position: {x: -40.432808, y: 0.010633469, z: 0.0004043579} + rotation: {x: 0.00000006219614, y: -0.0000000014250224, z: 8.8630894e-17, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: bone18 + parentName: Dummy16 + position: {x: 7.412575, y: -5.708975, z: -0.5783272} + rotation: {x: 0.015127089, y: 0.0023269006, z: -0.10177347, w: 0.99468994} + scale: {x: 1.0000005, y: 1.0000002, z: 0.9999998} + - name: bone19 + parentName: bone18 + position: {x: -35.342484, y: -0.000015258789, z: 0} + rotation: {x: 0.00000011920929, y: -0, z: -0, w: 1} + scale: {x: 0.99999994, y: 1.0000001, z: 1} + - name: bone20 + parentName: Dummy17 + position: {x: -41.929745, y: -40.71276, z: -140.0769} + rotation: {x: -0.3821523, y: -0.63681704, z: 0.008060306, w: 0.669596} + scale: {x: 0.9999999, y: 1.0000004, z: 1.0000001} + - name: Dummy15 + parentName: bone20 + position: {x: -31.813553, y: 0.08189201, z: 0.016124725} + rotation: {x: 0.00000002114805, y: 5.0420883e-14, z: 0.000002384186, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: bone21 + parentName: Dummy15 + position: {x: 6.0329895, y: -4.876993, z: -0.01612091} + rotation: {x: 0.000000068352975, y: 0.000000027810414, z: -0.094178505, w: 0.99555534} + scale: {x: 1.0000001, y: 1.0000004, z: 1} + - name: bone22 + parentName: bone21 + position: {x: -23.594742, y: 0.000005722046, z: -0.0000038146973} + rotation: {x: 0, y: -0, z: -0.000000007450581, w: 1} + scale: {x: 1, y: 0.9999999, z: 1} + - name: bone23 + parentName: Dummy17 + position: {x: 10.900871, y: -18.74494, z: -136.96698} + rotation: {x: -0.27125522, y: -0.81807667, z: -0.1136059, w: 0.4942315} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: Dummy13 + parentName: bone23 + position: {x: -29.722382, y: 0.01128006, z: 0.06893921} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 0.99999994, z: 1} + - name: bone24 + parentName: Dummy13 + position: {x: 6.043976, y: -3.8615227, z: -0.06896973} + rotation: {x: -0.000000014901163, y: -0, z: -0.11183199, w: 0.99372715} + scale: {x: 1.0000001, y: 1, z: 1} + - name: bone25 + parentName: bone24 + position: {x: -26.468597, y: 0.000015258789, z: 0} + rotation: {x: 0, y: -0, z: -0.000000059604645, w: 1} + scale: {x: 1.0000002, y: 1, z: 1} + - name: bone26 + parentName: Dummy17 + position: {x: 14.457146, y: 6.755829, z: -95.43654} + rotation: {x: -0.06401783, y: -0.82985705, z: -0.2561764, w: 0.49154124} + scale: {x: 0.9999997, y: 0.99999994, z: 1.0000001} + - name: Dummy12 + parentName: bone26 + position: {x: -31.842659, y: -0.06772995, z: 0.07206726} + rotation: {x: 0, y: -0, z: -0.000000003852413, w: 1} + scale: {x: 0.99999994, y: 1, z: 1} + - name: bone27 + parentName: Dummy12 + position: {x: 8.928024, y: -4.539524, z: -0.07206726} + rotation: {x: 0.99584925, y: -0.09101763, z: 0.00000008195638, w: 0.000000029802319} + scale: {x: 0.99999994, y: 1.0000007, z: 1.0000008} + - name: bone28 + parentName: bone27 + position: {x: -23.911926, y: -0.0000038146973, z: 0} + rotation: {x: 0.00000011920929, y: -3.1747354e-14, z: -0.0000002663161, w: 1} + scale: {x: 1, y: 0.9999997, z: 0.99999994} + - name: bone29 + parentName: Dummy17 + position: {x: 53.02556, y: -11.512764, z: -63.44818} + rotation: {x: 0.025857914, y: -0.923733, z: 0.3044976, w: 0.2309331} + scale: {x: 0.9999997, y: 1.0000002, z: 1} + - name: Dummy10 + parentName: bone29 + position: {x: -30.201763, y: -0.09638214, z: -0.003189087} + rotation: {x: 0.000000005952471, y: -1.7320851e-16, z: -0.000000029098588, w: 1} + scale: {x: 0.99999994, y: 1, z: 0.99999994} + - name: bone30 + parentName: Dummy10 + position: {x: 18.737762, y: -4.25605, z: -0.57514954} + rotation: {x: 0.034746196, y: 0.0014316592, z: -0.11143006, w: 0.9931637} + scale: {x: 0.99999976, y: 1.0000004, z: 1.0000002} + - name: bone31 + parentName: bone30 + position: {x: -19.893478, y: 0.0000076293945, z: 0.000015258789} + rotation: {x: 0, y: -0, z: -0.000000029802322, w: 1} + scale: {x: 0.9999998, y: 1.0000001, z: 0.99999994} + - name: bone32 + parentName: Dummy17 + position: {x: 51.485382, y: -5.9705353, z: -92.52437} + rotation: {x: -0.016365498, y: -0.95025975, z: 0.015010297, w: 0.31066614} + scale: {x: 0.9999997, y: 0.99999994, z: 0.99999976} + - name: Dummy11 + parentName: bone32 + position: {x: -30.518745, y: -0.0000076293945, z: 0} + rotation: {x: 1, y: -0, z: 0, w: 0.00000013315805} + scale: {x: 1, y: 1.0000001, z: 1} + - name: bone33 + parentName: Dummy11 + position: {x: 7.859947, y: 4.738289, z: -0.4413147} + rotation: {x: -0.998118, y: -0.058397785, z: 0.0089893555, w: 0.016414998} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000004} + - name: bone34 + parentName: bone33 + position: {x: -18.608421, y: 0, z: 0} + rotation: {x: -0.00000071525574, y: 0, z: -0, w: 1} + scale: {x: 0.9999999, y: 1.0000002, z: 0.99999994} + - name: bone35 + parentName: Dummy17 + position: {x: 63.803364, y: 5.4643707, z: -56.565918} + rotation: {x: 0.1398405, y: -0.9616463, z: 0.20452508, w: 0.117688075} + scale: {x: 1.0000001, y: 1.0000002, z: 1.0000005} + - name: Dummy09 + parentName: bone35 + position: {x: -21.34658, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + - name: bone36 + parentName: Dummy09 + position: {x: 8.345345, y: -2.6361008, z: -0.35231018} + rotation: {x: 0.0072442386, y: 0.009921998, z: -0.11478868, w: 0.993314} + scale: {x: 1.0000002, y: 0.99999994, z: 1} + - name: bone37 + parentName: bone36 + position: {x: -15.137821, y: 0.000022888184, z: 0} + rotation: {x: 0, y: -0, z: -0.000000029802322, w: 1} + scale: {x: 1.0000002, y: 0.99999976, z: 0.9999998} + - name: bone38 + parentName: Dummy17 + position: {x: -21.930695, y: 1.4463143, z: 97.79275} + rotation: {x: -0.6868767, y: 0.15576689, z: 0.6624033, w: 0.25526264} + scale: {x: 1, y: 1.0000001, z: 0.9999999} + - name: Dummy03 + parentName: bone38 + position: {x: -32.552948, y: -0.0058932304, z: 0.0002975464} + rotation: {x: -0.0000000015893555, y: 0.003978619, z: 0.000000399471, w: 0.9999921} + scale: {x: 1.0000001, y: 1, z: 1} + - name: bone39 + parentName: Dummy03 + position: {x: 4.851677, y: 3.8511345, z: 0.03830719} + rotation: {x: -0.00045661026, y: -0.0039525265, z: 0.11478384, w: 0.9933825} + scale: {x: 1.0000006, y: 1, z: 1.0000001} + - name: bone40 + parentName: bone39 + position: {x: -22.138565, y: 0.0000046491623, z: 0.000015258789} + rotation: {x: 0.00000013315805, y: -0.0000002663161, z: 3.5400902e-14, w: 1} + scale: {x: 0.99999976, y: 0.9999999, z: 0.99999976} + - name: bone41 + parentName: Dummy17 + position: {x: -58.506126, y: -18.279867, z: 88.88074} + rotation: {x: -0.7453389, y: -0.06033144, z: 0.48568627, w: 0.4527018} + scale: {x: 0.99999994, y: 1.0000005, z: 1.0000002} + - name: Dummy02 + parentName: bone41 + position: {x: -40.47274, y: 0.08493996, z: -0.009624481} + rotation: {x: 0.00000039947417, y: -6.1232316e-17, z: 6.123236e-17, w: 1} + scale: {x: 1, y: 0.9999999, z: 0.99999994} + - name: bone42 + parentName: Dummy02 + position: {x: 7.452507, y: 5.6133995, z: -0.56830597} + rotation: {x: -0.01512728, y: 0.0023268997, z: 0.10177346, w: 0.9946899} + scale: {x: 1.0000007, y: 1.0000006, z: 1.0000002} + - name: bone43 + parentName: bone42 + position: {x: -35.342484, y: 0.000011444092, z: 0} + rotation: {x: -0.00000013315805, y: -6.123235e-17, z: 6.123233e-17, w: 1} + scale: {x: 0.99999976, y: 1, z: 1.0000001} + - name: bone44 + parentName: Dummy17 + position: {x: -41.929817, y: -40.712715, z: 139.95258} + rotation: {x: -0.6695959, y: -0.008060005, z: 0.6368171, w: 0.38215238} + scale: {x: 1.0000001, y: 1.0000005, z: 1.0000001} + - name: Dummy01 + parentName: bone44 + position: {x: -31.813553, y: -0.08189106, z: 0.016117096} + rotation: {x: 0.00000013315805, y: -3.0148938e-13, z: -0.0000022636868, w: 1} + scale: {x: 1, y: 1, z: 1.0000001} + - name: bone45 + parentName: Dummy01 + position: {x: 6.0329895, y: 4.8769875, z: -0.01612854} + rotation: {x: -0.00000008786265, y: -0.000000023082334, z: 0.09417866, w: 0.99555534} + scale: {x: 1.0000004, y: 1.0000002, z: 1.0000001} + - name: bone46 + parentName: bone45 + position: {x: -23.594742, y: 0.0000038146973, z: 0.0000076293945} + rotation: {x: 0.00000026631608, y: 0.00000013315812, z: 0.00000026631608, w: 1} + scale: {x: 0.9999999, y: 1.0000002, z: 0.99999964} + - name: bone47 + parentName: Dummy17 + position: {x: 10.900795, y: -18.744919, z: 136.84267} + rotation: {x: -0.4942316, y: 0.11360629, z: 0.8180765, w: 0.27125537} + scale: {x: 1.000001, y: 1.000001, z: 0.99999994} + - name: Dummy04 + parentName: bone47 + position: {x: -29.722412, y: -0.011295319, z: 0.06894684} + rotation: {x: -6.123234e-17, y: -6.123234e-17, z: -6.123234e-17, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: bone48 + parentName: Dummy04 + position: {x: 6.0439606, y: 3.8615494, z: -0.06896973} + rotation: {x: 0.00000014901161, y: 0.000000057742, z: 0.111832075, w: 0.9937272} + scale: {x: 1.0000006, y: 1.0000006, z: 1.0000001} + - name: bone49 + parentName: bone48 + position: {x: -26.468613, y: -0.0000076293945, z: -0.000015258789} + rotation: {x: 0.0000002663161, y: 0.00000023841858, z: -6.349471e-14, w: 1} + scale: {x: 1.0000002, y: 0.9999999, z: 0.9999997} + - name: bone50 + parentName: Dummy17 + position: {x: 14.457108, y: 6.7558317, z: 95.31219} + rotation: {x: -0.49154118, y: 0.25617653, z: 0.82985705, w: 0.06401786} + scale: {x: 1.0000008, y: 1.0000005, z: 0.9999997} + - name: Dummy05 + parentName: bone50 + position: {x: -31.842659, y: 0.06771088, z: 0.07208252} + rotation: {x: -6.1232356e-17, y: -0.0000002663161, z: -6.1232356e-17, w: 1} + scale: {x: 0.9999999, y: 1, z: 1} + - name: bone51 + parentName: Dummy05 + position: {x: 8.928024, y: 4.5395355, z: -0.07208252} + rotation: {x: 0.9958494, y: 0.091017604, z: -0.00000020560609, w: -0.00000057558236} + scale: {x: 0.9999999, y: 0.99999964, z: 0.9999997} + - name: bone52 + parentName: bone51 + position: {x: -23.911926, y: 0, z: 0} + rotation: {x: -0.00000023841858, y: 0, z: -0, w: 1} + scale: {x: 1.0000002, y: 0.99999976, z: 1} + - name: bone53 + parentName: Dummy17 + position: {x: 51.48534, y: -5.9705315, z: 92.40005} + rotation: {x: -0.31066602, y: -0.015009746, z: 0.95025975, w: 0.016365737} + scale: {x: 0.9999998, y: 0.99999994, z: 0.99999976} + - name: Dummy06 + parentName: bone53 + position: {x: -30.518738, y: 0, z: 0} + rotation: {x: -0.00000013315805, y: -0.00000013315805, z: -1.77923e-14, w: 1} + scale: {x: 0.99999994, y: 1.0000001, z: 1} + - name: bone54 + parentName: Dummy06 + position: {x: 7.85997, y: 4.7382812, z: 0.4413147} + rotation: {x: -0.016414635, y: -0.00898935, z: 0.05839757, w: 0.998118} + scale: {x: 1.0000007, y: 1.0000006, z: 1.0000001} + - name: bone55 + parentName: bone54 + position: {x: -18.608421, y: 0, z: 0} + rotation: {x: 0.0000010652644, y: -2.5397883e-13, z: -0.00000023841858, w: 1} + scale: {x: 1, y: 0.99999994, z: 0.9999999} + - name: bone56 + parentName: Dummy17 + position: {x: 53.025513, y: -11.512733, z: 63.323822} + rotation: {x: -0.23093331, y: -0.30449703, z: 0.9237331, w: -0.025857806} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: Dummy07 + parentName: bone56 + position: {x: -30.201775, y: 0.09638977, z: -0.0032043457} + rotation: {x: 0.0000002663161, y: -0, z: -0, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: bone57 + parentName: Dummy07 + position: {x: 18.737762, y: 4.256035, z: -0.57514954} + rotation: {x: -0.034746088, y: 0.0014317816, z: 0.11143009, w: 0.99316365} + scale: {x: 1, y: 1, z: 1.0000002} + - name: bone58 + parentName: bone57 + position: {x: -19.893478, y: 0.0000076293945, z: 0} + rotation: {x: -1.2246469e-16, y: -0.00000023841858, z: -2.9197856e-23, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 0.9999998} + - name: bone59 + parentName: Dummy17 + position: {x: 63.80332, y: 5.4643707, z: 56.441574} + rotation: {x: -0.11768794, y: -0.20452474, z: 0.96164644, w: -0.13984041} + scale: {x: 1, y: 1.0000002, z: 0.99999964} + - name: Dummy08 + parentName: bone59 + position: {x: -21.346577, y: 0.0000076293945, z: 0.000015258789} + rotation: {x: 0.0000002663161, y: -3.5400902e-14, z: -0.00000013315805, w: 1} + scale: {x: 1.0000001, y: 0.99999994, z: 1} + - name: bone60 + parentName: Dummy08 + position: {x: 8.34536, y: 2.6361008, z: -0.3523407} + rotation: {x: -0.007244347, y: 0.009922649, z: 0.11478877, w: 0.993314} + scale: {x: 1.0000007, y: 1.000001, z: 1.0000011} + - name: bone61 + parentName: bone60 + position: {x: -15.137829, y: -0.000015258789, z: -0.000015258789} + rotation: {x: -0.00000023841847, y: 0.0000002384187, z: -0.0000004768371, w: 1} + scale: {x: 1, y: 1, z: 0.9999997} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 1 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 1 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 1 + additionalBone: 0 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds new file mode 100644 index 00000000..8b080356 Binary files /dev/null and b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds differ diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds.meta b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds.meta new file mode 100644 index 00000000..f7a01d8c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.dds.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: b1a84d2c498c9bf49a43907ea6d8c165 +IHVImageFormatImporter: + externalObjects: {} + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + isReadable: 0 + sRGBTexture: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga new file mode 100644 index 00000000..2b7d4222 Binary files /dev/null and b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga differ diff --git a/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga.meta b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga.meta new file mode 100644 index 00000000..dc53149e --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Model/shuijingciuv.tga.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 960edaa32b567c245887db1ed97f5e90 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: models/model_01_depend + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Prefabs.meta b/Assets/OxGFrame/AssetLoader/Example/Prefabs.meta new file mode 100644 index 00000000..31cc914d --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 517e51cd3c2bdde45983fa254dda36bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab b/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab new file mode 100644 index 00000000..aed3c2df --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab @@ -0,0 +1,796 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1022962820305100038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4446397341615542909} + - component: {fileID: 7009983433166919752} + - component: {fileID: 2616691598978730600} + - component: {fileID: 1854522040745514335} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4446397341615542909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022962820305100038} + m_LocalRotation: {x: 0.0075470903, y: -0.00021114363, z: -0.9995845, w: -0.027818875} + m_LocalPosition: {x: 6.6, y: -35.7, z: -0} + m_LocalScale: {x: 280.18, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 2764475446637735382} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -0.048, y: -0.864, z: -183.188} +--- !u!33 &7009983433166919752 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022962820305100038} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2616691598978730600 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022962820305100038} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1854522040745514335 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022962820305100038} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1045828945606412550 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4547903026210922290} + - component: {fileID: 5519143204796511789} + - component: {fileID: 2165345289804465837} + - component: {fileID: 9026430921977809858} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4547903026210922290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045828945606412550} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 41.9, y: -22, z: 0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 2764475446637735382} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5519143204796511789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045828945606412550} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2165345289804465837 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045828945606412550} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &9026430921977809858 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045828945606412550} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1937506043934774047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2775706956629085812} + - component: {fileID: 5705040925359959535} + - component: {fileID: 3889644894298993929} + - component: {fileID: 9194591789254803597} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2775706956629085812 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937506043934774047} + m_LocalRotation: {x: 0.00000008649654, y: -0.00000012541017, z: 0.000000097380514, + w: 1} + m_LocalPosition: {x: 44.6, y: 22, z: 0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 3002022380502640816} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5705040925359959535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937506043934774047} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3889644894298993929 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937506043934774047} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &9194591789254803597 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937506043934774047} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2247308165178635613 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8008802550718395581} + - component: {fileID: 6356391484839805542} + - component: {fileID: 8324395280956152246} + - component: {fileID: 2308822464888394073} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8008802550718395581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2247308165178635613} + m_LocalRotation: {x: 0.00000008649654, y: -0.00000012541017, z: 0.000000097380514, + w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 3002022380502640816} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6356391484839805542 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2247308165178635613} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8324395280956152246 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2247308165178635613} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2308822464888394073 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2247308165178635613} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2744999952178080891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8378503396097670042} + - component: {fileID: 8513734244503231675} + - component: {fileID: 5535843424409859240} + - component: {fileID: 7792980255722252091} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8378503396097670042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2744999952178080891} + m_LocalRotation: {x: -0.00035157547, y: 0.007539796, z: 0.046582967, w: 0.998886} + m_LocalPosition: {x: 22.1, y: 34.9, z: 26.4} + m_LocalScale: {x: 280.18, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 3002022380502640816} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -0.08, y: 0.861, z: 5.339} +--- !u!33 &8513734244503231675 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2744999952178080891} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5535843424409859240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2744999952178080891} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &7792980255722252091 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2744999952178080891} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6328199130588003633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5400515088884595778} + - component: {fileID: 8084369878617002768} + - component: {fileID: 441405185172876103} + - component: {fileID: 2011113634181592143} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5400515088884595778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328199130588003633} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_Children: [] + m_Father: {fileID: 2764475446637735382} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8084369878617002768 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328199130588003633} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &441405185172876103 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328199130588003633} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2011113634181592143 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328199130588003633} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8469485211240367206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8469485211240367209} + - component: {fileID: 8469485211240367208} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8469485211240367209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8469485211240367206} + 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: 8469485212467781361} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!108 &8469485211240367208 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8469485211240367206} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &8469485212467781262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8469485212467781361} + m_Layer: 0 + m_Name: model_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8469485212467781361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8469485212467781262} + 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: 8215443749838738717} + - {fileID: 8469485211240367209} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &8469485212003873526 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 8469485212467781361} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_Name + value: ice_devil + objectReference: {fileID: 0} + - target: {fileID: 5866666021909216657, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_Controller + value: + objectReference: {fileID: 9100000, guid: ec5f21088edcd5c41b6c87ea82b75077, type: 2} + - target: {fileID: 5866666021909216657, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + propertyPath: m_ApplyRootMotion + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4ce48ea5c8941c44982fa761ffc41b6f, type: 3} +--- !u!4 &3002022380502640816 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -2584797225355060666, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + m_PrefabInstance: {fileID: 8469485212003873526} + m_PrefabAsset: {fileID: 0} +--- !u!4 &8215443749838738717 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + m_PrefabInstance: {fileID: 8469485212003873526} + m_PrefabAsset: {fileID: 0} +--- !u!4 &2764475446637735382 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -3182703357197574368, guid: 4ce48ea5c8941c44982fa761ffc41b6f, + type: 3} + m_PrefabInstance: {fileID: 8469485212003873526} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab.meta b/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab.meta new file mode 100644 index 00000000..8017994c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Example/Prefabs/model_01.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b4ea3356cddbd8b41926c28adefdfbc5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: models/model_01 + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts.meta b/Assets/OxGFrame/AssetLoader/Scripts.meta new file mode 100644 index 00000000..9425436a --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e3c753e84864d645ba8dbfa3d2b8016 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor.meta new file mode 100644 index 00000000..11b1fdf5 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54da7933cfb508240beb0b4513166957 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef b/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef new file mode 100644 index 00000000..a4a59214 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "AssetLoader.Editor", + "rootNamespace": "", + "references": [ + "AssetLoader.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef.meta new file mode 100644 index 00000000..2754d03b --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/AssetLoader.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 342e96e890893b5459f7633042366d83 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle.meta new file mode 100644 index 00000000..9fd37580 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90f63f1aa41f9f6498c8dcf39b86c471 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs new file mode 100644 index 00000000..c269576c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs @@ -0,0 +1,238 @@ +using AssetLoader.Bundle; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +public class BundleConfigGeneratorEditor : EditorWindow +{ + public enum OperationType + { + GenerateConfigToSourceFolder, + ExportAndConfigFromSourceFolder, + GenerateConfigToSourceFolderAndOnlyExportSameConfig + } + + private static BundleConfigGeneratorEditor _instance = null; + internal static BundleConfigGeneratorEditor GetInstance() + { + if (_instance == null) _instance = GetWindow(); + return _instance; + } + + [SerializeField] + public OperationType operationType; + [SerializeField] + public string sourceFolder; + [SerializeField] + public string exportFolder; + [SerializeField] + public string productName; + + internal const string KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR = "KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR"; + + [MenuItem(BundleDistributorEditor.MenuRoot + "Bundle Config Generator", false, 899)] + public static void ShowWindow() + { + _instance = null; + GetInstance().titleContent = new GUIContent("Bundle Config Generator"); + GetInstance().Show(); + GetInstance().minSize = new Vector2(650f, 175f); + } + + private void OnEnable() + { + this.operationType = (OperationType)Convert.ToInt32(EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "operationType", "0")); + this.sourceFolder = EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "sourceFolder", Path.Combine($"{Application.dataPath}/", $"../AssetBundles")); + this.exportFolder = EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "exportFolder", Path.Combine($"{Application.dataPath}/", $"../ExportBundles")); + this.productName = EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "productName", Application.productName); + } + + private void OnGUI() + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.sourceFolder = EditorGUILayout.TextField("Source Folder", this.sourceFolder); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "sourceFolder", this.sourceFolder); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(0, 255, 128, 255); + if (GUILayout.Button("Open", GUILayout.MaxWidth(100f))) BundleDistributorEditor.OpenFolder(this.sourceFolder, true); + GUI.backgroundColor = bc; + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(83, 152, 255, 255); + if (GUILayout.Button("Browse", GUILayout.MaxWidth(100f))) this._OpenSourceFolder(); + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUI.BeginChangeCheck(); + this.operationType = (OperationType)EditorGUILayout.EnumPopup("Operation Type", this.operationType); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "operationType", ((int)this.operationType).ToString()); + this._OperationType(this.operationType); + } + + private void _OperationType(OperationType operationType) + { + switch (operationType) + { + case OperationType.GenerateConfigToSourceFolder: + this._DrawGenerateConfigToSourceFolderView(); + break; + case OperationType.ExportAndConfigFromSourceFolder: + this._DrawExportAndConfigFromSourceFolderView(); + break; + case OperationType.GenerateConfigToSourceFolderAndOnlyExportSameConfig: + this._DrawGenerateConfigToSourceFolderAndOnlyExportSameConfigView(); + break; + } + } + + private void _DrawGenerateConfigToSourceFolderView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("Generate Config To SourceFolder Settings"), centeredStyle); + EditorGUILayout.Space(); + + this._DrawProcessButton(this.operationType); + + EditorGUILayout.EndVertical(); + } + + private void _DrawExportAndConfigFromSourceFolderView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("Export And Config From SourceFolder Settings"), centeredStyle); + EditorGUILayout.Space(); + + this._DrawProductNameTextField(); + this._DrawExportFolderView(); + this._DrawProcessButton(this.operationType); + + EditorGUILayout.EndVertical(); + } + + private void _DrawGenerateConfigToSourceFolderAndOnlyExportSameConfigView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("Generate Config To SourceFolder And Only Export Same Config Settings"), centeredStyle); + EditorGUILayout.Space(); + + this._DrawProductNameTextField(); + this._DrawExportFolderView(); + this._DrawProcessButton(this.operationType); + + EditorGUILayout.EndVertical(); + } + + private void _DrawExportFolderView() + { + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.exportFolder = EditorGUILayout.TextField("Export Folder", this.exportFolder); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "exportFolder", this.exportFolder); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(0, 255, 128, 255); + if (GUILayout.Button("Open", GUILayout.MaxWidth(100f))) BundleDistributorEditor.OpenFolder(this.exportFolder, true); + GUI.backgroundColor = bc; + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(83, 152, 255, 255); + if (GUILayout.Button("Browse", GUILayout.MaxWidth(100f))) this._OpenExportFolder(); + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + } + + private void _DrawProductNameTextField() + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.productName = EditorGUILayout.TextField("Product Name", this.productName); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "productName", this.productName); + EditorGUILayout.EndHorizontal(); + } + + private void _DrawProcessButton(OperationType operationType) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(255, 185, 83, 255); + if (GUILayout.Button("Process", GUILayout.MaxWidth(100f))) + { + switch (operationType) + { + case OperationType.GenerateConfigToSourceFolder: + BundleDistributorEditor.GenerateBundleCfg(this.sourceFolder, this.sourceFolder); + EditorUtility.DisplayDialog("Process Message", "Generate Config To SourceFolder.", "OK"); + break; + case OperationType.ExportAndConfigFromSourceFolder: + BundleDistributorEditor.ExportBundleAndConfig(this.sourceFolder, this.exportFolder, this.productName); + EditorUtility.DisplayDialog("Process Message", "Export And Config From SourceFolder.", "OK"); + break; + case OperationType.GenerateConfigToSourceFolderAndOnlyExportSameConfig: + BundleDistributorEditor.GenerateBundleCfg(this.sourceFolder, this.sourceFolder); + string fullExportFolder = $"{this.exportFolder}/{this.productName}"; + if (Directory.Exists(fullExportFolder)) Directory.Delete(fullExportFolder, true); + Directory.CreateDirectory(fullExportFolder); + // 來源配置檔路徑 + string sourceFileName = Path.Combine(this.sourceFolder, BundleConfig.bundleCfgName + BundleConfig.cfgExt); + string destFileName = Path.Combine(fullExportFolder, BundleConfig.bundleCfgName + BundleConfig.cfgExt); + // 最後將來源配置檔複製至輸出路徑 + File.Copy(sourceFileName, destFileName); + EditorUtility.DisplayDialog("Process Message", "Generate Config To SourceFolder And Only Export Same Config.", "OK"); + break; + } + } + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + } + + private void _OpenSourceFolder() + { + string folderPath = EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "sourceFolder", Application.dataPath); + this.sourceFolder = EditorUtility.OpenFolderPanel("Open Source Folder", folderPath, string.Empty); + if (!string.IsNullOrEmpty(this.sourceFolder)) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "sourceFolder", this.sourceFolder); + } + + private void _OpenExportFolder() + { + string folderPath = EditorStorage.GetData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "exportFolder", Application.dataPath); + this.exportFolder = EditorUtility.OpenFolderPanel("Open Export Folder", folderPath, string.Empty); + if (!string.IsNullOrEmpty(this.exportFolder)) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_GENERATE_BUNDLE_CONFIG_EDITOR, "exportFolder", this.exportFolder); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs.meta new file mode 100644 index 00000000..33eccd06 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleConfigGeneratorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdea9df1d647a1b4b8a74d1de1180660 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs new file mode 100644 index 00000000..19b417a4 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs @@ -0,0 +1,403 @@ +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace AssetLoader.Bundle +{ + public static class BundleDistributorEditor + { + public const string MenuRoot = "BundleDistributor/"; + + public static void ExportBundleAndConfig(string sourceDir, string destDir, string productName = null) + { + // 生成配置檔數據 + var cfg = GenerateCfg(sourceDir); + + productName = (productName == null) ? cfg.PRODUCT_NAME : productName; + + if (Directory.Exists(destDir)) DeleteFolder(destDir); + + Directory.CreateDirectory(destDir); + + // 進行資料夾之間的複製 + string sourceFullDir = sourceDir; + string destFullDir = Path.GetFullPath(destDir + $@"/{productName}" + $@"/{cfg.EXPORT_NAME}"); + CopyFolderRecursively(sourceFullDir, destFullDir); + + // 配置檔序列化, 將進行寫入 + string jsonCfg = JsonConvert.SerializeObject(cfg); + + // 寫入配置文件 + string writePath = Path.Combine(destDir + $@"/{productName}", BundleConfig.bundleCfgName + BundleConfig.cfgExt); + WriteTxt(jsonCfg, writePath); + // BAK + string writeBakPath = Path.Combine(destDir + $@"/{productName}" + $@"/{cfg.EXPORT_NAME}", BundleConfig.bundleCfgName + BundleConfig.cfgExt + ".bak"); + WriteTxt(jsonCfg, writeBakPath); + + Debug.Log($"【成功輸出目錄】 主程式版本: {cfg.APP_VERSION}, 資源檔版本: {cfg.RES_VERSION}, 輸出名稱: {cfg.EXPORT_NAME}"); + } + + public static void GenerateBundleCfg(string sourceDir, string destDir) + { + // 生成配置檔數據 + var cfg = GenerateCfg(sourceDir); + + // 配置檔序列化, 將進行寫入 + string jsonCfg = JsonConvert.SerializeObject(cfg); + + // 寫入配置文件 + string writePath = Path.Combine(destDir, BundleConfig.bundleCfgName + BundleConfig.cfgExt); + WriteTxt(jsonCfg, writePath); + + Debug.Log($"【成功建立配置檔】主程式版本: {cfg.APP_VERSION}, 資源檔版本: {cfg.RES_VERSION}"); + } + + public static VersionFileCfg GenerateCfg(string sourcePath = null) + { + var cfg = new VersionFileCfg(); // 生成配置檔 + + string bPath = (sourcePath == null) ? BundleConfig.GetBuildedBundlePath() : sourcePath; // 取得Bundle路徑 + + FileInfo[] files = GetFilesRecursively(bPath); + foreach (var file in files) + { + string fileName = Path.GetFileName(file.FullName); // 取得檔案名稱 + string dirName = Path.GetDirectoryName(file.FullName).Replace(Path.GetFullPath(bPath), string.Empty); // 取得目錄名稱 + long fileSize = file.Length; // 取出檔案大小 + string fileMd5 = MakeMd5ForFile(file); // 生成檔案Md5 + + if (fileName == $"{BundleConfig.bundleCfgName}{BundleConfig.cfgExt}") continue; + + ResFileInfo rf = new ResFileInfo(); // 建立資源檔資訊 + rf.fileName = fileName; // 檔案名稱 + rf.dirName = dirName.Replace(@"\", "/"); // 目錄名稱 + rf.size = fileSize; // 檔案大小 + rf.md5 = fileMd5; // 檔案md5 + + string fullName = $@"{rf.dirName}/{rf.fileName}"; + fullName = fullName.Substring(1, fullName.Length - 1); + cfg.AddResFileInfo(fullName, rf); // 加入配置檔的快取中 + } + + // 產品名稱 + cfg.PRODUCT_NAME = Application.productName; + + // 主程式版本 + cfg.APP_VERSION = Application.version; + PlayerPrefs.SetString(BundleConfig.APP_VERSION, cfg.APP_VERSION); + + // 資源檔版本 (建議使用時間加入資源版本控制) + var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); + cfg.RES_VERSION = $"{cfg.APP_VERSION}<{timestamp}>"; + PlayerPrefs.SetString(BundleConfig.RES_VERSION, cfg.RES_VERSION); + + // 輸出名稱 + DateTime dt = (new DateTime(1970, 1, 1, 0, 0, 0)).AddHours(8).AddSeconds(timestamp); + cfg.EXPORT_NAME = dt.ToString("yyyyMMddHHmmss"); + + Debug.Log($"成功建立配置檔數據!!!"); + + return cfg; + } + + /// + /// 寫入文字文件檔 + /// + /// + /// + public static void WriteTxt(string txt, string writePath) + { + // 寫入配置文件 + var file = File.CreateText(writePath); + file.Write(txt); + file.Close(); + } + + public static void CopyToStreamingAssets(string sourceDir) + { + int dialogState = EditorUtility.DisplayDialogComplex( + "StreamingAssets Copy Notification", + "Choose [copy and delete] will delete folder first and copy files to StremingAssets.\nChoose [copy and merge] will not delete folder but kept files with merge.", + "copy and delete", + "cancel", + "copy and merge"); + + if (dialogState == 1) return; + + string destDir = Application.streamingAssetsPath; + + if (Directory.Exists(destDir) && (dialogState == 0)) DeleteFolder(destDir); + + Directory.CreateDirectory(destDir); + + string sourceFullDir = sourceDir; + string destFullDir = Path.GetFullPath(destDir); + CopyFolderRecursively(sourceFullDir, destFullDir); + + // auto refresh + AssetDatabase.Refresh(); + + Debug.Log("Copy bundles to [StreamingAssets] successfully (Auto Refresh)."); + } + + public static void CopyToStreamingAssets(string sourceDir, bool clearFolders = false) + { + string destDir = Application.streamingAssetsPath; + + if (Directory.Exists(destDir) && clearFolders) DeleteFolder(destDir); + + Directory.CreateDirectory(destDir); + + string sourceFullDir = sourceDir; + string destFullDir = Path.GetFullPath(destDir); + CopyFolderRecursively(sourceFullDir, destFullDir); + + // auto refresh + AssetDatabase.Refresh(); + + Debug.Log("Copy bundles to [StreamingAssets] successfully (Auto Refresh)."); + } + + [MenuItem(MenuRoot + "Local Download Directory (Persistent Data Path)/Open Download Directory", false, 298)] + public static void OpenDownloadDir() + { + var dir = BundleConfig.GetLocalDlFileSaveDirectory(); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + System.Diagnostics.Process.Start(dir); + } + + [MenuItem(MenuRoot + "Local Download Directory (Persistent Data Path)/Clear Download Directory", false, 299)] + public static void ClearDownloadDir() + { + bool operate = EditorUtility.DisplayDialog( + "Clear Download Folder", + "Are you sure you want to delete download folder?", + "yes", + "no"); + + if (!operate) return; + + var dir = BundleConfig.GetLocalDlFileSaveDirectory(); + + DeleteFolder(dir); + + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + } + + public static void AesEncryptBundleFiles(string dir, string key = null, string iv = null) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行加密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的加密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.AES.AesEncryptFile(fPath, key, iv); + } + } + + public static void AesDecryptBundleFiles(string dir, string key = null, string iv = null) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行解密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的解密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.AES.AesDecryptFile(fPath, key, iv); + } + } + + public static void XorEncryptBundleFiles(string dir, byte key = 0) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行加密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的加密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.XOR.XorEncryptFile(fPath, key); + } + } + + public static void XorDecryptBundleFiles(string dir, byte key = 0) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行解密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的解密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.XOR.XorDecryptFile(fPath, key); + } + } + + public static void OffsetEncryptBundleFiles(string dir, int dummySize = 0) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行加密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的加密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.Offset.OffsetEncryptFile(fPath, dummySize); + } + } + + public static void OffsetDecryptBundleFiles(string dir, int dummySize = 0) + { + // 取得目錄下所有檔案 + FileInfo[] files = GetFilesRecursively(dir); + + // 對所有檔案進行解密 + for (int i = 0; i < files.Length; i++) + { + // 略過Config檔案 + if (files[i].Name == BundleConfig.bundleCfgName + BundleConfig.cfgExt) continue; + + // 執行各檔案的解密 + string fPath = files[i].Directory.ToString() + $@"\{files[i].Name}"; + FileCryptogram.Offset.OffsetDecryptFile(fPath, dummySize); + } + } + + [MenuItem(MenuRoot + "Show Last Exported Versions Log", false, 1099)] + public static void ShowVersions() + { + if (string.IsNullOrEmpty(PlayerPrefs.GetString(BundleConfig.APP_VERSION)) || string.IsNullOrEmpty(PlayerPrefs.GetString(BundleConfig.RES_VERSION))) + { + Debug.Log("Cannot found Versions record !!! (Execute Generate BundleConfig first.)"); + } + else Debug.Log($"【最後一次輸出的結果】主程式版本: {PlayerPrefs.GetString(BundleConfig.APP_VERSION)}, 資源檔版本: {PlayerPrefs.GetString(BundleConfig.RES_VERSION)}"); + } + + public static void CopyFolderRecursively(string sourceDir, string destDir) + { + if (!Directory.Exists(destDir)) Directory.CreateDirectory(destDir); + + // Now Create all of the directories + foreach (string dirPath in Directory.GetDirectories(sourceDir, "*", SearchOption.AllDirectories)) + { + Directory.CreateDirectory(dirPath.Replace(sourceDir, destDir)); + } + + // Copy all the files & Replaces any files with the same name + foreach (string newPath in Directory.GetFiles(sourceDir, "*.*", SearchOption.AllDirectories)) + { + File.Copy(newPath, newPath.Replace(sourceDir, destDir), true); + } + } + + public static void DeleteFolder(string dir) + { + if (Directory.Exists(dir)) + { + string[] fileEntries = Directory.GetFileSystemEntries(dir); + for (int i = 0; i < fileEntries.Length; i++) + { + string path = fileEntries[i]; + if (File.Exists(path)) File.Delete(path); + else DeleteFolder(path); + } + Directory.Delete(dir); + } + } + + public static FileInfo[] GetFilesRecursively(string sourcePath) + { + DirectoryInfo root; + FileInfo[] files; + List combineFiles = new List(); + + // STEP1. 先執行來源目錄下的檔案 + root = new DirectoryInfo(sourcePath); // 取得該路徑目錄 + files = root.GetFiles(); // 取得該路徑目錄中的所有檔案 + foreach (var file in files) + { + combineFiles.Add(file); + } + + // STEP2. 再執行來源目錄下的目錄檔案 (Recursively) + foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories)) + { + root = new DirectoryInfo(dirPath); + files = root.GetFiles(); + foreach (var file in files) + { + combineFiles.Add(file); + } + } + + return combineFiles.ToArray(); + } + + public static void OpenFolder(string dir, bool autoCreateFolder = false) + { + if (autoCreateFolder) + { + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + } + System.Diagnostics.Process.Start(dir); + } + + /// + /// 生成檔案的MD5碼 + /// + /// + /// + public static string MakeMd5ForFile(FileInfo file) + { + FileStream fs = file.OpenRead(); + System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] fileMd5 = md5.ComputeHash(fs); + fs.Close(); + + StringBuilder sBuilder = new StringBuilder(); + for (int i = 0; i < fileMd5.Length; i++) + { + sBuilder.Append(fileMd5[i].ToString("x2")); + } + return sBuilder.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs.meta new file mode 100644 index 00000000..f3046c34 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleDistributorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40ebc0214afb3c04b83396fb2ec496fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs new file mode 100644 index 00000000..8ba313b0 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs @@ -0,0 +1,91 @@ +using AssetLoader.Bundle; +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +public class BundleModeEditor : EditorWindow +{ + private static BundleModeEditor _instance = null; + internal static BundleModeEditor GetInstance() + { + if (_instance == null) _instance = GetWindow(); + return _instance; + } + + [SerializeField] + public bool enableAssetDatabaseMode = false; + [SerializeField] + public bool enableBundleLoadFromStream = false; + + internal const string KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR = "KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR"; + + [MenuItem(BundleDistributorEditor.MenuRoot + "Bundle Mode", false, 0)] + public static void ShowWindow() + { + _instance = null; + GetInstance().titleContent = new GUIContent("Bundle Mode"); + GetInstance().Show(); + GetInstance().minSize = new Vector2(400f, 120f); + } + + private void OnEnable() + { + this.enableAssetDatabaseMode = Convert.ToBoolean(EditorStorage.GetData(KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR, "enableAssetDatabaseMode", "true")); + this.enableBundleLoadFromStream = Convert.ToBoolean(EditorStorage.GetData(KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR, "enableBundleLoadFromStream", "true")); + + BundleConfig.SaveAssetDatabaseMode(this.enableAssetDatabaseMode); + BundleConfig.SaveBundleStreamMode(this.enableBundleLoadFromStream); + } + + private void OnDisable() + { + base.SaveChanges(); + } + + private void OnGUI() + { + // ↓↓↓ AssetDatabase Section ↓↓↓ + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(1f, 0.4f, 0.7f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("AssetDatabase Mode"), centeredStyle); + EditorGUILayout.Space(); + + this.enableAssetDatabaseMode = GUILayout.Toggle(this.enableAssetDatabaseMode, new GUIContent("Enable AssetDatabase Mode", "If checked will load from AssetDatabase.")); + BundleConfig.SaveAssetDatabaseMode(this.enableAssetDatabaseMode); + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR, "enableAssetDatabaseMode", this.enableAssetDatabaseMode.ToString()); + + EditorGUILayout.EndVertical(); + // ↑↑↑ AssetDatabase Section ↑↑↑ + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + // ↓↓↓ Stream Section ↓↓↓ + style = new GUIStyle(); + bg = new Texture2D(1, 1); + pixels = Enumerable.Repeat(new Color(1f, 0.76f, 0.4f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("Bundle Stream Mode"), centeredStyle); + EditorGUILayout.Space(); + + this.enableBundleLoadFromStream = GUILayout.Toggle(this.enableBundleLoadFromStream, new GUIContent("Enable Bundle Load From Stream", "If checked will use load from stream, can reduce memory.")); + BundleConfig.SaveBundleStreamMode(this.enableBundleLoadFromStream); + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_BUNDLE_MODE_EDITOR, "enableBundleLoadFromStream", this.enableBundleLoadFromStream.ToString()); + + EditorGUILayout.EndVertical(); + // ↑↑↑ Stream Section ↑↑↑ + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs.meta new file mode 100644 index 00000000..218c879c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/BundleModeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5437dcd12e220f34a9041939029a98b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs new file mode 100644 index 00000000..a6c1710d --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs @@ -0,0 +1,71 @@ +using AssetLoader.Bundle; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +public class CopyToStreamingAssetsEditor : EditorWindow +{ + private static CopyToStreamingAssetsEditor _instance = null; + internal static CopyToStreamingAssetsEditor GetInstance() + { + if (_instance == null) _instance = GetWindow(); + return _instance; + } + + [SerializeField] + public string sourceFolder; + + internal const string KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR = "KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR"; + + [MenuItem(BundleDistributorEditor.MenuRoot + "Copy to StreamingAssets", false, 999)] + public static void ShowWindow() + { + _instance = null; + GetInstance().titleContent = new GUIContent("Copy to StreamingAssets"); + GetInstance().Show(); + GetInstance().minSize = new Vector2(650f, 100f); + } + + private void OnEnable() + { + this.sourceFolder = EditorStorage.GetData(KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR, "sourceFolder", Application.dataPath); + } + + private void OnGUI() + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.sourceFolder = EditorGUILayout.TextField("Source Folder", this.sourceFolder); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR, "sourceFolder", this.sourceFolder); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(0, 255, 128, 255); + if (GUILayout.Button("Open", GUILayout.MaxWidth(100f))) BundleDistributorEditor.OpenFolder(this.sourceFolder); + GUI.backgroundColor = bc; + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(83, 152, 255, 255); + if (GUILayout.Button("Browse", GUILayout.MaxWidth(100f))) this._OpenSourceFolder(); + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(255, 185, 83, 255); + if (GUILayout.Button("Copy to StreamingAssets", GUILayout.MaxWidth(200f))) + { + BundleDistributorEditor.CopyToStreamingAssets(this.sourceFolder); + } + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + } + + private void _OpenSourceFolder() + { + string folderPath = EditorStorage.GetData(KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR, "sourceFolder", Application.dataPath); + this.sourceFolder = EditorUtility.OpenFolderPanel("Open Source Folder", folderPath, string.Empty); + if (!string.IsNullOrEmpty(this.sourceFolder)) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_COPY_TO_STREAMINGASSETS_EDITOR, "sourceFolder", this.sourceFolder); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs.meta new file mode 100644 index 00000000..83ee0554 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CopyToStreamingAssetsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f60b8fffe2b73c429019c5e82667352 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs new file mode 100644 index 00000000..3bb61f98 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs @@ -0,0 +1,276 @@ +using AssetLoader.Bundle; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +public class CryptogramEditor : EditorWindow +{ + public enum CryptogramType + { + OFFSET, + XOR, + AES + } + + private static CryptogramEditor _instance = null; + internal static CryptogramEditor GetInstance() + { + if (_instance == null) _instance = GetWindow(); + return _instance; + } + + [SerializeField] + public CryptogramType cryptogramType; + [SerializeField] + public string sourceFolder; + [SerializeField] + public bool autoSave = false; + + internal const string KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR = "KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR"; + + [MenuItem(BundleDistributorEditor.MenuRoot + "Bundle Cryptogram", false, 799)] + public static void ShowWindow() + { + _instance = null; + GetInstance().titleContent = new GUIContent("Bundle Cryptogram"); + GetInstance().Show(); + GetInstance().minSize = new Vector2(650f, 175f); + } + + private void OnEnable() + { + this.cryptogramType = (CryptogramType)Convert.ToInt32(EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "cryptogramType", "0")); + this.sourceFolder = EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "sourceFolder", Application.dataPath); + this.autoSave = Convert.ToBoolean(EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "autoSave", "false")); + if (this.autoSave) + { + this.dummySize = Convert.ToInt32(EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "dummySize", "0")); + this.xorKey = Convert.ToInt32(EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "xorKey", "0")); + this.aesKey = EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesKey", "file_key"); + this.aesIv = EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesIv", "file_vector"); + } + else this._ClearCryptogramKeyData(); + } + + private void OnDisable() + { + base.SaveChanges(); + } + + private void OnGUI() + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.sourceFolder = EditorGUILayout.TextField("Source Folder", this.sourceFolder); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "sourceFolder", this.sourceFolder); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(0, 255, 128, 255); + if (GUILayout.Button("Open", GUILayout.MaxWidth(100f))) BundleDistributorEditor.OpenFolder(this.sourceFolder); + GUI.backgroundColor = bc; + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(83, 152, 255, 255); + if (GUILayout.Button("Browse", GUILayout.MaxWidth(100f))) this._OpenSourceFolder(); + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + this.cryptogramType = (CryptogramType)EditorGUILayout.EnumPopup("Cryptogram Type", this.cryptogramType); + if (EditorGUI.EndChangeCheck()) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "cryptogramType", ((int)this.cryptogramType).ToString()); + this.autoSave = GUILayout.Toggle(this.autoSave, new GUIContent("Auto Save", "If checked will save cryptogram key data.")); + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "autoSave", this.autoSave.ToString()); + EditorGUILayout.EndHorizontal(); + + this._CryptogramType(this.cryptogramType); + } + + private void _CryptogramType(CryptogramType cryptogramType) + { + switch (cryptogramType) + { + case CryptogramType.OFFSET: + this._DrawOffsetView(); + break; + case CryptogramType.XOR: + this._DrawXorView(); + break; + case CryptogramType.AES: + this._DrawAesView(); + break; + } + } + + [SerializeField] + public int dummySize = 0; + private void _DrawOffsetView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("Offset Settings"), centeredStyle); + EditorGUILayout.Space(); + + this.dummySize = EditorGUILayout.IntField(new GUIContent("Offset Dummy Size", "Add dummy bytes into front of file (per byte = Random 0 ~ 255)."), this.dummySize); + if (this.dummySize < 0) this.dummySize = 0; + if (this.autoSave) + { + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "dummySize", this.dummySize.ToString()); + } + + this._DrawOperateButtons(this.cryptogramType); + + EditorGUILayout.EndVertical(); + } + + [SerializeField] + public int xorKey = 0; + private void _DrawXorView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("XOR Settings"), centeredStyle); + EditorGUILayout.Space(); + + this.xorKey = EditorGUILayout.IntField("XOR KEY (0 ~ 255)", this.xorKey); + if (this.xorKey < 0) this.xorKey = 0; + else if (this.xorKey > 255) this.xorKey = 255; + if (this.autoSave) + { + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "xorKey", this.xorKey.ToString()); + } + + this._DrawOperateButtons(this.cryptogramType); + + EditorGUILayout.EndVertical(); + } + + [SerializeField] + public string aesKey = "file_key"; + [SerializeField] + public string aesIv = "file_iv"; + private void _DrawAesView() + { + EditorGUILayout.Space(); + + GUIStyle style = new GUIStyle(); + var bg = new Texture2D(1, 1); + Color[] pixels = Enumerable.Repeat(new Color(0f, 0.47f, 1f, 0.5f), Screen.width * Screen.height).ToArray(); + bg.SetPixels(pixels); + bg.Apply(); + style.normal.background = bg; + EditorGUILayout.BeginVertical(style); + var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label")); + centeredStyle.alignment = TextAnchor.UpperCenter; + GUILayout.Label(new GUIContent("AES Settings"), centeredStyle); + EditorGUILayout.Space(); + + this.aesKey = EditorGUILayout.TextField("AES KEY", this.aesKey); + this.aesIv = EditorGUILayout.TextField("AES IV", this.aesIv); + if (this.autoSave) + { + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesKey", this.aesKey); + EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesIv", this.aesIv); + } + + this._DrawOperateButtons(this.cryptogramType); + + EditorGUILayout.EndVertical(); + } + + private void _DrawOperateButtons(CryptogramType cryptogramType) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + Color bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(255, 185, 83, 255); + if (GUILayout.Button("Decrypt", GUILayout.MaxWidth(100f))) + { + switch (cryptogramType) + { + case CryptogramType.OFFSET: + BundleDistributorEditor.OffsetDecryptBundleFiles(this.sourceFolder, this.dummySize); + EditorUtility.DisplayDialog("Crytogram Message", "[OFFSET] Decrypt Process.", "OK"); + break; + case CryptogramType.XOR: + BundleDistributorEditor.XorDecryptBundleFiles(this.sourceFolder, (byte)this.xorKey); + EditorUtility.DisplayDialog("Crytogram Message", "[XOR] Decrypt Process.", "OK"); + break; + case CryptogramType.AES: + if (string.IsNullOrEmpty(this.aesKey) || string.IsNullOrEmpty(this.aesIv)) + { + EditorUtility.DisplayDialog("Crytogram Message", "[AES] KEY or IV is Empty!!! Can't process.", "OK"); + break; + } + BundleDistributorEditor.AesDecryptBundleFiles(this.sourceFolder, this.aesKey, this.aesIv); + EditorUtility.DisplayDialog("Crytogram Message", "[AES] Decrypt Process.", "OK"); + break; + } + } + GUI.backgroundColor = bc; + + bc = GUI.backgroundColor; + GUI.backgroundColor = new Color32(255, 74, 218, 255); + if (GUILayout.Button("Encrypt", GUILayout.MaxWidth(100f))) + { + switch (cryptogramType) + { + case CryptogramType.OFFSET: + BundleDistributorEditor.OffsetEncryptBundleFiles(this.sourceFolder, this.dummySize); + EditorUtility.DisplayDialog("Crytogram Message", "[OFFSET] Encrypt Process.", "OK"); + break; + case CryptogramType.XOR: + BundleDistributorEditor.XorEncryptBundleFiles(this.sourceFolder, (byte)this.xorKey); + EditorUtility.DisplayDialog("Crytogram Message", "[XOR] Encrypt Process.", "OK"); + break; + case CryptogramType.AES: + if (string.IsNullOrEmpty(this.aesKey) || string.IsNullOrEmpty(this.aesIv)) + { + EditorUtility.DisplayDialog("Crytogram Message", "[AES] KEY or IV is Empty!!! Can't process.", "OK"); + break; + } + BundleDistributorEditor.AesEncryptBundleFiles(this.sourceFolder, this.aesKey, this.aesIv); + EditorUtility.DisplayDialog("Crytogram Message", "[AES] Encrypt Process.", "OK"); + break; + } + } + GUI.backgroundColor = bc; + EditorGUILayout.EndHorizontal(); + } + + private void _ClearCryptogramKeyData() + { + EditorStorage.DeleteData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "dummySize"); + EditorStorage.DeleteData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "xorKey"); + EditorStorage.DeleteData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesKey"); + EditorStorage.DeleteData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "aesIv"); + } + private void _OpenSourceFolder() + { + string folderPath = EditorStorage.GetData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "sourceFolder", Application.dataPath); + this.sourceFolder = EditorUtility.OpenFolderPanel("Open Source Folder", folderPath, string.Empty); + if (!string.IsNullOrEmpty(this.sourceFolder)) EditorStorage.SaveData(KEY_SAVE_DATA_FOR_CRYPTOGRAM_EDITOR, "sourceFolder", this.sourceFolder); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs.meta new file mode 100644 index 00000000..105219fe --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/Bundle/CryptogramEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 594cea42bbeb3ab449c1e684f519fb87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs b/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs new file mode 100644 index 00000000..2110d2e6 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs @@ -0,0 +1,157 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +public class EditorStorage : MonoBehaviour +{ + public static void SaveString(string key, string value) + { + EditorPrefs.SetString(key, value); + } + + public static string GetString(string key, string defaultValue = "") + { + return EditorPrefs.GetString(key, defaultValue); + } + + public static void SaveInt(string key, int value) + { + EditorPrefs.SetInt(key, value); + } + public static int GetInt(string key, int defaultValue = 0) + { + return EditorPrefs.GetInt(key, defaultValue); + } + + public static void SaveFloat(string key, float value) + { + EditorPrefs.SetFloat(key, value); + } + public static float GetFloat(string key, float defaultValue = 0f) + { + return EditorPrefs.GetFloat(key, defaultValue); + } + + public static bool HasKey(string key) + { + return EditorPrefs.HasKey(key); + } + + public static void DeleteKey(string key) + { + EditorPrefs.DeleteKey(key); + } + + public static void DeleteAll() + { + EditorPrefs.DeleteAll(); + } + + /// + /// 透過文本形式儲存資料 + /// + /// + /// + /// + public static void SaveData(string contentKey, string key, string value) + { + string content = GetString(contentKey); + + var allWords = content.Split('\n'); + var lines = new List(allWords); + Dictionary dataMap = new Dictionary(); + foreach (var readLine in lines) + { + //Debug.Log($"save readline: {readLine}"); + if (readLine.IndexOf('#') != -1 && readLine[0] == '#') continue; + var args = readLine.Split(' '); + if (args.Length >= 2) + { + //Debug.Log($"save args => key: {args[0]}, value: {args[1]}"); + if (!dataMap.ContainsKey(args[0])) dataMap.Add(args[0], args[1].Replace("\n", "").Replace("\r", "")); + } + } + + if (dataMap.ContainsKey(key)) + { + content = content.Replace($"{key} {dataMap[key]}", $"{key} {value}"); + } + else + { + content += $"{key} {value}\n"; + } + + SaveString(contentKey, content); + } + + /// + /// 取得文本中的特定數據 + /// + /// + /// + /// + /// + public static string GetData(string contentKey, string key, string defaultValue = null) + { + string content = GetString(contentKey); + if (string.IsNullOrEmpty(content)) return defaultValue; + + var allWords = content.Split('\n'); + var lines = new List(allWords); + Dictionary dataMap = new Dictionary(); + foreach (var readLine in lines) + { + if (readLine.IndexOf('#') != -1 && readLine[0] == '#') continue; + var args = readLine.Split(' '); + if (args.Length >= 2) + { + if (!dataMap.ContainsKey(args[0])) dataMap.Add(args[0], args[1].Replace("\n", "").Replace("\r", "")); + } + } + + dataMap.TryGetValue(key, out string value); + if (string.IsNullOrEmpty(value)) return defaultValue; + + return value; + } + + /// + /// 刪除文本中的透定數據 + /// + /// + /// + public static void DeleteData(string contentKey, string key) + { + string content = GetString(contentKey); + + var allWords = content.Split('\n'); + var lines = new List(allWords); + Dictionary dataMap = new Dictionary(); + foreach (var readLine in lines) + { + if (readLine.IndexOf('#') != -1 && readLine[0] == '#') continue; + var args = readLine.Split(' '); + if (args.Length >= 2) + { + if (!dataMap.ContainsKey(args[0])) dataMap.Add(args[0], args[1].Replace("\n", "").Replace("\r", "")); + } + } + + if (dataMap.ContainsKey(key)) + { + content = content.Replace($"{key} {dataMap[key]}\n", string.Empty); + } + + SaveString(contentKey, content); + } + + /// + /// 刪除全文本數據 + /// + /// + public static void DeleteContext(string contextKey) + { + DeleteKey(contextKey); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs.meta new file mode 100644 index 00000000..3f87af98 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Editor/EditorStorage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1edb3cfe82651554c8a331406e4223bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime.meta new file mode 100644 index 00000000..8d1e83d6 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a10aa16fda4dc6741b1e7478e10cd037 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef new file mode 100644 index 00000000..a35c7811 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef @@ -0,0 +1,16 @@ +{ + "name": "AssetLoader.Runtime", + "rootNamespace": "", + "references": [ + "GUID:f51ebe6a0ceec4240a699833d6309b23" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef.meta new file mode 100644 index 00000000..eac2f5a0 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoader.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 02b9a6f6b4dfd0b42b1b13bae3b89abf +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle.meta new file mode 100644 index 00000000..eb374084 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ef5947a1e723674998fca5774437cb3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs new file mode 100644 index 00000000..08e157e7 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs @@ -0,0 +1,292 @@ +using Cysharp.Threading.Tasks; +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEngine.Networking; + +namespace AssetLoader.Bundle +{ + public static class BundleConfig + { + public class CryptogramType + { + public const string NONE = "NONE"; + public const string OFFSET = "OFFSET"; + public const string XOR = "XOR"; + public const string AES = "AES"; + } + + static BundleConfig() + { + bAssetDatabaseMode = GetAssetDatabaseMode(); + bBundleStreamMode = GetBundleStreamMode(); + } + + // 啟用Editor中的AssetDatabase讀取資源模式 + public static bool bAssetDatabaseMode = true; + public const string KEY_ASSET_DATABASE_MODE = "bAssetDatabaseMode"; + // 啟用文件流讀取 (內存較小) + public static bool bBundleStreamMode = true; + public const string KEY_BUNDLE_STREAM_MODE = "bBundleStreamMode"; + + public static void SaveAssetDatabaseMode(bool active) + { + PlayerPrefs.SetString(KEY_ASSET_DATABASE_MODE, active.ToString()); + PlayerPrefs.Save(); + } + + public static bool GetAssetDatabaseMode() + { + return Convert.ToBoolean(PlayerPrefs.GetString(KEY_ASSET_DATABASE_MODE, "true")); + } + + public static void SaveBundleStreamMode(bool active) + { + PlayerPrefs.SetString(KEY_BUNDLE_STREAM_MODE, active.ToString()); + PlayerPrefs.Save(); + } + + public static bool GetBundleStreamMode() + { + return Convert.ToBoolean(PlayerPrefs.GetString(KEY_BUNDLE_STREAM_MODE, "true")); + } + + // [NONE], [OFFSET, dummySize], [XOR, key], [AES, key, iv] => ex: "None" or "offset, 32" or "Xor, 123" or "Aes, key, iv" + private static string _cryptogram; + public static string[] cryptogramArgs + { + get + { + if (string.IsNullOrEmpty(_cryptogram)) return new string[] { CryptogramType.NONE }; + else + { + string[] args = _cryptogram.Trim().Split(','); + for (int i = 0; i < args.Length; i++) + { + args[i] = args[i].Trim(); + } + return args; + } + } + } + + // 配置檔中的KEY + public const string APP_VERSION = "APP_VERSION"; + public const string RES_VERSION = "RES_VERSION"; + + // 配置檔 + public const string cfgExt = ""; // 自行輸入(.json), 空字串表示無副檔名 + public const string bundleCfgName = "b_cfg"; // 配置檔的名稱 + public const string recordCfgName = "r_cfg"; // 記錄配置檔的名稱 + + /** + * url_cfg format following + * bundle_ip 127.0.0.1 + * # => comment + */ + + // 佈署配置檔中的KEY + public const string BUNDLE_IP = "bundle_ip"; + public const string GOOGLE_STORE = "google_store"; + public const string APPLE_STORE = "apple_store"; + + // 佈署配置檔 + public const string cfgFullPathName = "bundle_cfg"; + + // Bundle平台路徑 + public const string bundleDir = "/AssetBundles"; // Build 目錄 + public const string exportDir = "/ExportBundles"; // Export 目錄 + public const string winDir = "/win"; + public const string androidDir = "/android"; + public const string iosDir = "/ios"; + public const string h5Dir = "/h5"; + + public static void InitCryptogram(string cryptogram) + { + _cryptogram = cryptogram; + } + + public static async UniTask GetValueFromUrlCfg(string key) + { + string pathName = System.IO.Path.Combine(Application.streamingAssetsPath, cfgFullPathName); + var file = await FileRequest(pathName); + var content = file.text; + var allWords = content.Split('\n'); + var lines = new List(allWords); + var fileMap = new Dictionary(); + foreach (var readLine in lines) + { + if (readLine.IndexOf('#') != -1 && readLine[0] == '#') continue; + var args = readLine.Split(' '); + if (args.Length >= 2) + { + if (!fileMap.ContainsKey(args[0])) fileMap.Add(args[0], args[1].Replace("\n", "").Replace("\r", "")); + } + } + + fileMap.TryGetValue(key, out string value); + return value; + } + + public static async UniTask GetAppStoreLink() + { +#if UNITY_ANDROID + return await GetValueFromUrlCfg(GOOGLE_STORE); +#elif UNITY_IPHONE + return await GetValueFromUrlCfg(APPLE_STORE); +#endif + return string.Empty; + } + + /// + /// 取得打包後的Bundle資源路徑 + /// + /// + public static string GetBuildedBundlePath() + { +#if UNITY_STANDALONE_WIN + return Path.Combine(Application.dataPath, $"..{bundleDir}{winDir}"); +#endif + +#if UNITY_ANDROID + return Path.Combine(Application.dataPath , $"..{bundleDir}{androidDir}"); +#endif + +#if UNITY_IOS + return Path.Combine(Application.dataPath , $"..{bundleDir}{iosDir}"); +#endif + +#if UNITY_WEBGL + return Path.Combine(Application.dataPath, $"..{bundleDir}{h5Dir}"); +#endif + + throw new System.Exception("ERROR Bundle PATH !!!"); + } + + public static string GetExportBundlePath() + { +#if UNITY_STANDALONE_WIN + return Path.Combine(Application.dataPath, $"..{exportDir}{winDir}"); +#endif + +#if UNITY_ANDROID + return Path.Combine(Application.dataPath , $"..{exportDir}{androidDir}"); +#endif + +#if UNITY_IOS + return Path.Combine(Application.dataPath , $"..{exportDir}{iosDir}"); +#endif + +#if UNITY_WEBGL + return Path.Combine(Application.dataPath, $"..{exportDir}{h5Dir}"); +#endif + + throw new System.Exception("ERROR Export PATH !!!"); + } + + /// + /// 取得本地Bundle下載後的儲存路徑 (持久化) + /// + /// + public static string GetLocalDlFileSaveDirectory() + { + if (Application.platform == RuntimePlatform.IPhonePlayer) + { + // IOS要用這個路徑,否則審核不過 + return Application.temporaryCachePath; + } + + // Android、PC 可以使用這個路徑 + return Application.persistentDataPath + exportDir; + } + + /// + /// 取得本地BundleConfig下載後的儲存路徑 (持久化) + /// + /// + public static string GetLocalDlFileSaveBundleConfigPath() + { + return Path.Combine(GetLocalDlFileSaveDirectory(), $"{bundleCfgName}{cfgExt}"); + } + + public static string GetStreamingAssetsBundleConfigPath() + { + return Path.Combine(Application.streamingAssetsPath, $"{bundleCfgName}{cfgExt}"); + } + + /// + /// 取得資源伺服器的Bundle (URL) + /// + /// + public static async UniTask GetServerBundleUrl() + { +#if UNITY_STANDALONE_WIN + return await GetValueFromUrlCfg(BUNDLE_IP) + $"{exportDir}{winDir}"; +#endif + +#if UNITY_ANDROID + return await GetValueFromUrlCfg(BUNDLE_IP) + $"{exportDir}{androidDir}"; +#endif + +#if UNITY_IOS + return await GetValueFromUrlCfg(BUNDLE_IP) + $"{exportDir}{iosDir}"; +#endif + +#if UNITY_WEBGL + return await GetValueFromUrlCfg(BUNDLE_IP) + $"{exportDir}{h5Dir}"; +#endif + } + + /// + /// 取得對應平台的Manifest檔名 + /// + /// + public static string GetManifestFileName() + { +#if UNITY_STANDALONE_WIN + return winDir.Replace("/", string.Empty).Trim(); +#endif + +#if UNITY_ANDROID + return androidDir.Replace("/", string.Empty).Trim(); +#endif + +#if UNITY_IOS + return iosDir.Replace("/", string.Empty).Trim(); +#endif + +#if UNITY_WEBGL + return h5Dir.Replace("/", string.Empty).Trim(); +#endif + } + + public static async UniTask FileRequest(string url) + { + try + { + var request = UnityWebRequest.Get(url); + await request.SendWebRequest(); + + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log($"Request failed, URL: {url}"); + request.Dispose(); + + return null; + } + + string txt = request.downloadHandler.text; + TextAsset file = new TextAsset(txt); + request.Dispose(); + + return file; + } + catch + { + Debug.Log($"Request failed, URL: {url}"); + return null; + } + } + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs.meta new file mode 100644 index 00000000..f6d29c5c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cf1b2306cce35f458df990b419444f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs new file mode 100644 index 00000000..136e863a --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs @@ -0,0 +1,725 @@ +using Cysharp.Threading.Tasks; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using UnityEngine; +using UnityEngine.Networking; + +namespace AssetLoader.Bundle +{ + public class BundleDistributor + { + private static BundleDistributor _instance = null; + public static BundleDistributor GetInstance() + { + if (_instance == null) _instance = new BundleDistributor(); + return _instance; + } + + public enum ExecuteStatus + { + NONE, + + DOWLOADING_CONFIG, // 正在從服務器下載配置文件 + SERVER_REQUEST_ERROR, // 服務器請求錯誤 (連接錯誤) + PROCESSING, // 正在處理中... + + APP_VERSION_INCONSISTENT, // 主程式版本不一致 + NO_NEED_TO_UPDATE_PATCH, // 無需更新資源 + + CHECKING_PATCH, // 檢查更新包 + DOWNLOAD_PATH, // 下載更新包 + + WRITE_CONFIG, // 寫入配置文件 + COMPLETE_UPDATE_CONFIG, // 完成更新配置文件 + + ASSET_DATABASE_MODE // AssetDatabase 加載模式 (Editor) + } + + public ExecuteStatus executeStatus { get; protected set; } + public CancellationTokenSource cts = new CancellationTokenSource(); + + private VersionFileCfg _streamingCfg; + private VersionFileCfg _localCfg; + private VersionFileCfg _recordCfg; + private VersionFileCfg _updateCfg; + private VersionFileCfg _serverCfg; + + private Downloader _downloader = null; + private ulong _patchSizeBytes = 0; + + private Action _complete = null; + private Downloader.Progression _progression = null; + + public BundleDistributor() + { + this.executeStatus = ExecuteStatus.NONE; + this._downloader = new Downloader(this); + } + + /// + /// 重置 + /// + public void Reset() + { + this.executeStatus = ExecuteStatus.DOWLOADING_CONFIG; + this._patchSizeBytes = 0; + + this._complete = null; + this._progression = null; + } + + /// + /// 取消UniTask執行 + /// + public void TaskCancel() + { + this.cts.Cancel(); + this.cts.Dispose(); + this.cts = new CancellationTokenSource(); + } + + /// + /// 設置執行狀態 + /// + /// + public void SetExecuteStatus(ExecuteStatus executeStatus) + { + this.executeStatus = executeStatus; + } + + /// + /// 取得更新包大小 (Bytes) + /// + /// + public ulong GetPatchSizeBytes() + { + return this._patchSizeBytes; + } + + /// + /// 取得下載器 + /// + /// + public Downloader GetDownloader() + { + return this._downloader; + } + + /// + /// 取得本地配置檔 + /// + /// + public VersionFileCfg GetLocalCfg() + { + return this._localCfg; + } + + /// + /// 取得StreamingAssets中的配置檔 + /// + /// + public VersionFileCfg GetStreamingCfg() + { + return this._streamingCfg; + } + + /// + /// 取得本地紀錄配置檔 + /// + /// + public VersionFileCfg GetRecordCfg() + { + return this._recordCfg; + } + + /// + /// 取得更新配置檔 + /// + /// + public VersionFileCfg GetUpdateCfg() + { + return this._updateCfg; + } + + /// + /// 取得遠端配置檔 + /// + /// + public VersionFileCfg GetServerCfg() + { + return this._serverCfg; + } + + /// + /// 前往主程式商店 + /// + public async UniTaskVoid GoToAppStore() + { + Application.OpenURL(await BundleConfig.GetAppStoreLink()); + } + + /// + /// 執行檢查, 並且下載 + /// + /// + public void Check(Action complete = null, Downloader.Progression progression = null) + { + BundleDistributor.GetInstance().TaskCancel(); + BundleDistributor.GetInstance().Reset(); + BundleDistributor.GetInstance()._Execute(complete, progression).Forget(); + } + + /// + /// 刪除所有緩存數據跟配置檔 (即清空下載目錄, 以致重新修復並且下載) + /// + public void Repair(Action complete = null, Downloader.Progression progression = null) + { + var dir = BundleConfig.GetLocalDlFileSaveDirectory(); + + _DeleteFolder(dir); + + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + this.Check(complete, progression); + } + + /// + /// 暫停下載 + /// + public void StopDownload() + { + this.TaskCancel(); + } + + /// + /// 繼續下載 + /// + public void ContinueDownload() + { + this.SetExecuteStatus(BundleDistributor.ExecuteStatus.PROCESSING); + this._Execute().Forget(); + } + + /// + /// 重新嘗試下載 + /// + public void RetryDownload() + { + this.TaskCancel(); + this.SetExecuteStatus(BundleDistributor.ExecuteStatus.PROCESSING); + this._Execute().Forget(); + } + + /// + /// 調用執行 (Main) + /// + /// + /// + private async UniTask _Execute(Action complete = null, Downloader.Progression progression = null) + { + this._complete = (complete == null) ? this._complete : complete; + this._progression = (progression == null) ? this._progression : progression; + +#if UNITY_EDITOR + // 如果使用 AssetDatabase 加載模式, 將執行狀態切換至 ASSET_DATABASE_MODE (表示無需執行任何事項) + if (BundleConfig.bAssetDatabaseMode) + { + this._downloader.SetDownloadProgress(1); + this._complete?.Invoke(); + this.executeStatus = ExecuteStatus.ASSET_DATABASE_MODE; + } +#endif + + switch (this.executeStatus) + { + // 步驟1. 下載配置檔案 + case ExecuteStatus.DOWLOADING_CONFIG: + Debug.Log("正在從Server下載配置文件"); + await this._DownloadServerBundleConfig(); + break; + // 步驟2. 處理資源更新, 內部將會進行 ExecuteStatus 的切換 + case ExecuteStatus.PROCESSING: + Debug.Log("正在處理..."); + await this._ProcessUpdate(); + break; + } + } + + /// + /// 下載服務端的配置檔案 (STEP 1.) + /// + /// + private async UniTask _DownloadServerBundleConfig() + { + // 取得內置在StreamingAssets中的Cfg, 需要從中取得ProductName + string streamingAssetsCfgPath = BundleConfig.GetStreamingAssetsBundleConfigPath(); + string streamingCfgJson = await this._GetFileFromStreamingAssets(streamingAssetsCfgPath); + var streamingCfg = JsonConvert.DeserializeObject(streamingCfgJson); + this._streamingCfg = streamingCfg; + + // 取得Server端配置檔的URL + this._serverCfg = new VersionFileCfg(); + string url = await BundleConfig.GetServerBundleUrl() + $@"/{streamingCfg.PRODUCT_NAME}/{BundleConfig.bundleCfgName}{BundleConfig.cfgExt}"; + Debug.Log(url); + + // 請求Server的配置檔 + using (UnityWebRequest request = UnityWebRequest.Get(url)) + { + await request.SendWebRequest().WithCancellation(this.cts.Token); + + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + // Do retry connect to server + + Debug.Log($"Server request failed. URL: {url}"); + + this.executeStatus = ExecuteStatus.SERVER_REQUEST_ERROR; + } + else + { + Debug.Log($"SERVER REQ: {url}"); + + string json = request.downloadHandler.text; + this._serverCfg = JsonConvert.DeserializeObject(json); + + this.executeStatus = ExecuteStatus.PROCESSING; + + this._Execute().Forget(); + } + } + } + + /// + /// 進行比對配置檔與更新 (STEP 2.) + /// + /// + private async UniTask _ProcessUpdate() + { + // 【切換狀態 - 開始檢查更新】 + this.executeStatus = ExecuteStatus.CHECKING_PATCH; + + // 確保本地端的儲存目錄是否存在, 無存在則建立 + if (!Directory.Exists(BundleConfig.GetLocalDlFileSaveDirectory())) + { + Directory.CreateDirectory(BundleConfig.GetLocalDlFileSaveDirectory()); + } + + // 把資源配置文件拷貝到持久化目錄Application.persistentDataPath + // ※備註: 因為更新文件後是需要改寫版本號, 而在手機平台上的StreamingAssets是不可寫入的 + if (!File.Exists(BundleConfig.GetLocalDlFileSaveBundleConfigPath())) + { + string streamingAssetsCfgPath = BundleConfig.GetStreamingAssetsBundleConfigPath(); + string localCfgPath = BundleConfig.GetLocalDlFileSaveBundleConfigPath(); + +#if UNITY_STANDALONE_WIN + if (File.Exists(streamingAssetsCfgPath)) + { + File.Copy(streamingAssetsCfgPath, localCfgPath); + } +#endif + +#if UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL + string streamingCfgJson = await this._GetFileFromStreamingAssets(streamingAssetsCfgPath); + if (!string.IsNullOrEmpty(streamingCfgJson)) + { + await this._CopyFileFromStreamingAssets(streamingAssetsCfgPath, localCfgPath); + } +#endif + } + + var localCfg = new VersionFileCfg(); + + { + try + { + // 從本地端讀取配置檔 + string localCfgPath = BundleConfig.GetLocalDlFileSaveBundleConfigPath(); + string tempCfg = File.ReadAllText(localCfgPath); + localCfg = JsonConvert.DeserializeObject(tempCfg); + } + catch + { + Debug.Log("Read Local Save BundleConfig.json failed."); + } + + // 比對主程式版本 + if (localCfg.APP_VERSION != this._serverCfg.APP_VERSION) + { + // Do GoToAppStore + + // 【切換狀態 - 主程式版本不一致】 + this.executeStatus = ExecuteStatus.APP_VERSION_INCONSISTENT; + + // 取消Task + this.TaskCancel(); + + Debug.Log("主程式版本不符, 需更新主程式 (商店下載更新)"); + Debug.Log($"LOCAL APP_VER: { localCfg.APP_VERSION}, SERVER APP_VER: {this._serverCfg.APP_VERSION}"); + return; + } + // 比對資源版本 + else if (localCfg.RES_VERSION == this._serverCfg.RES_VERSION) + { + this._ReadLocalCfg(); // 讀取本地端配置檔 + this._ReadLocalRecordCfg(); // 讀取本地端紀錄配置檔 + this._downloader.SetDownloadProgress(1); // 設置Downloader的Progress = 1 (表示無需更新 = 完成) + this._complete?.Invoke(); // 完成處理的Handle + + // 【切換狀態 - 無需更新】 + this.executeStatus = ExecuteStatus.NO_NEED_TO_UPDATE_PATCH; + + // 取消Task + this.TaskCancel(); + + Debug.Log($"無需更新資源 (當前已是最新版本)"); + Debug.Log($"LOCAL RES_VER: { localCfg.RES_VERSION}, SERVER RES_VER: {this._serverCfg.RES_VERSION}"); + return; + } + + // 如果資源版本與服務端的資源版本不一致, 以下開始執行系列程序 + Debug.Log($"LOCAL RES_VER: { localCfg.RES_VERSION}, SERVER RES_VER: {this._serverCfg.RES_VERSION}"); + + // Local配置檔與Server配置檔進行資源文件比對, 並且建立更新用的配置檔 (用於文件更新的依據配置檔) + this._updateCfg = new VersionFileCfg(); + foreach (var svrFile in this._serverCfg.RES_FILES) + { + var sFileName = svrFile.Key; // Server FileName (服務端資源名稱) + var sFile = svrFile.Value; // Server File (服務端資源資訊) + + // 檢查[本地端的配置文件]是否有[服務端的配置文件]中的資源名稱 (如果沒有表示【新資源】) + if (!localCfg.HasFile(sFileName)) + { + // 如果沒有, 則進行新增資源檔至要更新的配置檔中 + this._updateCfg.AddResFileInfo(sFileName, sFile); + } + else + { + string localMd5 = localCfg.GetResFileInfo(sFileName).md5; // 本地端的檔案Md5 + string svrMd5 = svrFile.Value.md5; // 服務端的檔案Md5 + + // 檢查[本地端的資源檔Md5]是否與[服務端的資源檔Md5]有不一致 + if (localMd5 != svrMd5) + { + // 如果不一致 (表示資源有變更), 則進行新增資源檔至要更新的配置檔中 + this._updateCfg.AddResFileInfo(sFileName, sFile); + } + } + } + + // 取得更新包大小 + this._patchSizeBytes = this.GetUpdateSizeBytes(this._updateCfg); + Debug.Log($"更新包大小: {this.GetUpdateTotalSizeToString(this._updateCfg)}, 更新數量: {this.GetUpdateCount(this._updateCfg)}"); + await UniTask.Delay(TimeSpan.FromSeconds(1f), ignoreTimeScale: false, PlayerLoopTiming.FixedUpdate, this.cts.Token); + + // 【切換狀態 - 下載更新包】, 下載更新包 + this.executeStatus = ExecuteStatus.DOWNLOAD_PATH; + await this._downloader.DownloadFiles(this._progression); + await UniTask.Delay(TimeSpan.FromSeconds(0.5f), ignoreTimeScale: false, PlayerLoopTiming.FixedUpdate, this.cts.Token); + + // 【切換狀態 - 開始寫入配置檔】, 等待所有文件寫入完畢 + this.executeStatus = ExecuteStatus.WRITE_CONFIG; + this._DownloadFinishedAndWirteCfg(this._updateCfg); + } + } + + /// + /// 從StreamingAssets中取得文字檔案 + /// + /// + /// + private async UniTask _GetFileFromStreamingAssets(string filePath) + { + using (UnityWebRequest request = UnityWebRequest.Get(filePath)) + { + await request.SendWebRequest().WithCancellation(this.cts.Token); + + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log("BundleConfig.json Not Exist in StreamingAssets."); + Debug.Log(request.error); + } + else + { + string json = request.downloadHandler.text; + Debug.Log("BundleConfig.json is Exist."); + return json; + } + } + + return ""; + } + + /// + /// 從StreamingAssets中複製檔案 + /// + /// + /// + /// + private async UniTask _CopyFileFromStreamingAssets(string sourceFile, string destFile) + { + using (UnityWebRequest request = UnityWebRequest.Get(sourceFile)) + { + await request.SendWebRequest().WithCancellation(this.cts.Token); + + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log("BundleConfig.json Not Exist in StreamingAssets."); + Debug.Log(request.error); + } + else + { + string json = request.downloadHandler.text; + File.WriteAllText(destFile, json); + } + } + } + + /// + /// 讀取本地端的記錄配置檔 (Persistent Data Path) + /// + private void _ReadLocalRecordCfg() + { + string localFilePath = Path.Combine(BundleConfig.GetLocalDlFileSaveDirectory(), $"{BundleConfig.recordCfgName}{BundleConfig.cfgExt}"); + if (File.Exists(localFilePath)) + { + string json = File.ReadAllText(localFilePath); + this._recordCfg = JsonConvert.DeserializeObject(json); + } + } + + /// + /// 讀取本地端的配置檔 (Persistent Data Path) + /// + private void _ReadLocalCfg() + { + string localFilePath = Path.Combine(BundleConfig.GetLocalDlFileSaveDirectory(), $"{BundleConfig.bundleCfgName}{BundleConfig.cfgExt}"); + if (File.Exists(localFilePath)) + { + string json = File.ReadAllText(localFilePath); + this._localCfg = JsonConvert.DeserializeObject(json); + } + } + + /// + /// 執行完成後的配置檔寫入程序 + /// + /// + private void _DownloadFinishedAndWirteCfg(VersionFileCfg updateCfg) + { + // 將[服務端的配置文件]寫入[本地端的配置文件] + string localCfgPath = BundleConfig.GetLocalDlFileSaveBundleConfigPath(); + var svrCfgJson = JsonConvert.SerializeObject(this._serverCfg); + File.WriteAllText(localCfgPath, svrCfgJson); // 進行寫入存儲 + + // 取得[記錄配置檔]的路徑 + string recordCfgPath = Path.Combine(BundleConfig.GetLocalDlFileSaveDirectory(), $"{BundleConfig.recordCfgName}{BundleConfig.cfgExt}"); + + // 檢查[記錄配置檔]是否存在 + if (File.Exists(recordCfgPath)) + { + string recordFile = File.ReadAllText(recordCfgPath); + + VersionFileCfg recordCfg = JsonConvert.DeserializeObject(recordFile); + foreach (var file in recordCfg.RES_FILES) + { + string fileName = file.Key; + // 將上一次的[紀錄配置檔]進行合併至[更新配置檔] (有則修改, 無則添加) + if (updateCfg.HasFile(fileName)) + { + updateCfg.RES_FILES[fileName] = file.Value; + } + else + { + updateCfg.AddResFileInfo(fileName, file.Value); + } + } + } + + try + { + // 將[更新配置檔], 更新至[紀錄配置檔] + var updateCfgJson = JsonConvert.SerializeObject(updateCfg); + File.WriteAllText(recordCfgPath, updateCfgJson); // 進行寫入存儲 + this._ReadLocalCfg(); // 讀取本地端配置檔 + this._ReadLocalRecordCfg(); // 讀取本地[記錄配置檔] (因為已經進行重新寫入了) + //this._complete?.Invoke(); // 完成處理的Handle + + // 【切換狀態 - 完成配置寫入與更新】 + this.executeStatus = ExecuteStatus.COMPLETE_UPDATE_CONFIG; + + // 完成後取消Task + this.TaskCancel(); + + // 完成寫入後, 再執行一次檢查是否無需更新了 + this.Check(this._complete, this._progression); + + Debug.Log("完成下載, 並且完成寫入配置檔案."); + } + catch + { + Debug.Log("Update RecordConfig.json failed."); + } + } + + /// + /// 製造Md5碼 (小寫) + /// + /// + /// + public string MakeMd5ForFile(string filePath) + { + FileStream fs = null; + + try + { + fs = new FileStream(filePath, FileMode.Open); + } + catch + { + fs?.Close(); + fs?.Dispose(); + return string.Empty; + } + + + System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] fileMd5 = md5.ComputeHash(fs); + fs.Close(); + fs.Dispose(); + + StringBuilder sBuilder = new StringBuilder(); + for (int i = 0; i < fileMd5.Length; i++) + { + sBuilder.Append(fileMd5[i].ToString("x2")); + } + return sBuilder.ToString(); + + } + + /// + /// 取得配置檔中的資源檔總大小 (Bytes) + /// + /// + /// + public ulong GetUpdateSizeBytes(VersionFileCfg cfg) + { + ulong size = 0; + foreach (var file in cfg.RES_FILES) + { + size += (ulong)file.Value.size; + } + + return size; + } + + /// + /// 取得配置檔中的資源數 + /// + /// + /// + public int GetUpdateCount(VersionFileCfg cfg) + { + if (cfg == null) return 0; + + return cfg.RES_FILES.Count; + } + + /// + /// 取得配置檔中的資源檔總大小 + /// + /// + /// + public string GetUpdateTotalSizeToString(VersionFileCfg cfg) + { + if (cfg == null) return ""; + + float size = 0; + foreach (var file in cfg.RES_FILES) + { + size += file.Value.size; + } + + if (size < (1024 * 1024)) + { + return (size / 1024).ToString("f2") + "KB"; + } + else if (size >= (1024 * 1024) && size < (1024 * 1024 * 1024)) + { + return (size / (1024 * 1024)).ToString("f2") + "MB"; + } + else + { + return (size / (1024 * 1024 * 1024)).ToString("f2") + "GB"; + } + } + + /// + /// Bytes傳輸速率轉換 + /// + /// + /// + public string GetSpeedBytesToString(long bytes) + { + if (bytes < (1024 * 1024)) + { + return ((float)bytes / 1024).ToString("f2") + "KB/s"; + } + else if (bytes >= (1024 * 1024) && bytes < (1024 * 1024 * 1024)) + { + return ((float)bytes / (1024 * 1024)).ToString("f2") + "MB/s"; + } + else + { + return ((float)bytes / (1024 * 1024 * 1024)).ToString("f2") + "GB/s"; + } + } + + /// + /// 轉換Bytes為大小字串 (KB, MB, GB) + /// + /// + /// + public string GetBytesToString(long bytes) + { + if (bytes < (1024 * 1024)) + { + return ((float)bytes / 1024).ToString("f2") + "KB"; + } + else if (bytes >= (1024 * 1024) && bytes < (1024 * 1024 * 1024)) + { + return ((float)bytes / (1024 * 1024)).ToString("f2") + "MB"; + } + else + { + return ((float)bytes / (1024 * 1024 * 1024)).ToString("f2") + "GB"; + } + } + + /// + /// 刪除目錄 + /// + /// + private static void _DeleteFolder(string dir) + { + if (Directory.Exists(dir)) + { + string[] fileEntries = Directory.GetFileSystemEntries(dir); + for (int i = 0; i < fileEntries.Length; i++) + { + string path = fileEntries[i]; + if (File.Exists(path)) File.Delete(path); + else _DeleteFolder(path); + } + Directory.Delete(dir); + } + } + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs.meta new file mode 100644 index 00000000..f2c1258c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleDistributor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b620111d54dac24186f98cfdafe8f49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs new file mode 100644 index 00000000..744fd5a2 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader.Bundle +{ + public class ResFileInfo + { + public string fileName; // 檔案名稱 + public string dirName; // 目錄名稱 + public long size; // 檔案大小 + public string md5; // 檔案MD5 + } + + public class VersionFileCfg + { + public string PRODUCT_NAME; // 產品名稱 + public string APP_VERSION; // 主程式版本 + public string RES_VERSION; // 資源檔版本 + public string EXPORT_NAME; // 輸出名稱 (依照時間作為資料夾名稱) + public Dictionary RES_FILES; // 此次版本的資源檔案 + + public VersionFileCfg() + { + this.RES_FILES = new Dictionary(); + } + + public void AddResFileInfo(string fileName, ResFileInfo rf) + { + if (this.RES_FILES.ContainsKey(fileName)) return; + this.RES_FILES.Add(fileName, rf); + } + + public ResFileInfo GetResFileInfo(string fileName) + { + this.RES_FILES.TryGetValue(fileName, out ResFileInfo resFileInfo); + return resFileInfo; + } + + public bool HasFile(string fileName) + { + return this.RES_FILES.ContainsKey(fileName); + } + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs.meta new file mode 100644 index 00000000..b37e6262 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/BundleInfos.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2cdf0d9bc1e4e14e8533c3977fb978c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs new file mode 100644 index 00000000..be3a3980 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs @@ -0,0 +1,324 @@ +using Cysharp.Threading.Tasks; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEngine.Networking; + +namespace AssetLoader.Bundle +{ + public class Downloader + { + + public delegate void Progression(float progress, int dlCount, string dlSize, string dlSpeed); // Progression回調(下載進度, 下載數量, 下載大小, 下載速度) + + private ulong _allSizeBytes = 0; // 取得下載的總大小 + private bool _retryDownload = false; // 嘗試下載的開關 + private Stack _stackWaitFiles = new Stack(); // 柱列下載快取 + + public float dlProgress { get; private set; } // 下載進度 (0.00 - 1.00) + public int dlSpeed { get; private set; } // 下載速度 + public long dlBytes { get; private set; } // 下載大小 + public int dlCount { get; private set; } // 下載數量 + + private BundleDistributor _bd = null; + + public Downloader(BundleDistributor bd) + { + this._bd = bd; + } + + private void _Reset() + { + this._stackWaitFiles.Clear(); + this.dlBytes = 0; + this.dlCount = 0; + + this._retryDownload = false; + } + + /// + /// 返回是否嘗試重新下載 + /// + /// + public bool IsRetryDownload() + { + return this._retryDownload; + } + + /// + /// 設置下載進度值 + /// + /// + public void SetDownloadProgress(float pr) + { + this.dlProgress = pr; + } + + /// + /// 調用執行下載 + /// + /// + public async UniTask DownloadFiles(Progression progression = null) + { + Debug.Log("【開始斷點續傳模式下載】"); + + this._Reset(); + + // 取得更新配置檔中要下載的資源文件, 進行下載等待柱列 + foreach (var file in this._bd.GetUpdateCfg().RES_FILES) + { + string fileName = file.Key; + this._stackWaitFiles.Push(fileName); + } + + // 取得更新配置檔中所有資源文件的檔案大小 (即更新包大小) + this._allSizeBytes = this._bd.GetUpdateSizeBytes(this._bd.GetUpdateCfg()); + + // 開始從下載等待柱列中取出下載 (後續則會自動進行下一個的取出下載) + if (this._stackWaitFiles.Count > 0) + { + var fileName = this._stackWaitFiles.Pop(); + this.DownloadFile(this._bd.GetUpdateCfg().RES_FILES[fileName], fileName).Forget(); + } + + // 計算下載資訊 + await this.CalculateDownloadInfo(progression); + } + + /// + /// 單個檔案下載的執行程序 + /// + /// + /// + /// + protected async UniTask DownloadFile(ResFileInfo file, string fileName) + { + // fileName本身夾帶目錄名稱 (才會需要特殊字串處理只取出單純的檔案名稱) + var dlFileName = (fileName.IndexOf('/') != -1) ? fileName.Substring(fileName.LastIndexOf('/')).Replace("/", string.Empty) : fileName; + var dlFile = file; + var dlFullName = $@"/{fileName}"; + var filePath = BundleConfig.GetLocalDlFileSaveDirectory() + $@"{dlFullName}"; + string rdlMd5Name = $"sdlMd5: {dlFullName}"; + + Debug.Log("Downloading FilePath: " + filePath); + + var folderPath = filePath.Replace(dlFileName, string.Empty); + if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); + + var rdlMd5 = PlayerPrefs.GetString(rdlMd5Name, ""); + if (string.IsNullOrEmpty(rdlMd5)) + { + // 下載前紀錄該資源的Md5 + PlayerPrefs.SetString(rdlMd5Name, dlFile.md5); + } + else + { + // 判斷檔案是否已經存在於本地端, 再去判斷資源是否過期 or 下載完成了 + if (File.Exists(filePath)) + { + // 判斷需要下載的資源Md5是否過期, 有則刪除舊檔案 + if (rdlMd5 != dlFile.md5) + { + File.Delete(filePath); + // 紀錄新資源的Md5 + PlayerPrefs.SetString(rdlMd5Name, dlFile.md5); + } + else + { + var localMd5 = this._bd.MakeMd5ForFile(filePath); + // 假如已經下載好了, 但是該資源檔的Md5與服務端的Md5一致, 則跳過處理執行下一個的下載 + if (localMd5 == dlFile.md5) + { + this.dlBytes += dlFile.size; + this.dlCount += 1; + Debug.Log($"Already has file: {dlFullName}. Skip to next! "); + + this.NextFileDownload().Forget(); + return; + } + } + } + } + + // 資源檔案的Url + var fileUrl = await BundleConfig.GetServerBundleUrl() + $@"/{this._bd.GetServerCfg().PRODUCT_NAME}" + $@"/{this._bd.GetServerCfg().EXPORT_NAME}" + $@"{dlFullName}"; + + // 標檔頭請求 + var header = UnityWebRequest.Head(fileUrl); + await header.SendWebRequest().WithCancellation(this._bd.cts.Token); + + // 如果資源請求不到, 將進行重新請求嘗試 + if (header.result == UnityWebRequest.Result.ProtocolError || header.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log($"Header failed. URL: {fileUrl}"); + + this._retryDownload = true; + + header.Dispose(); + + return; + } + + // 從標檔頭中取出請求該檔案的總長度 (總大小) + long totalSize = long.Parse(header.GetResponseHeader("Content-Length")); + header?.Dispose(); + + // 從本地端讀取檔案, 並且累加該檔案大小作為下載的大小 + FileStream fs = null; + try + { + fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write); + } + catch + { + fs?.Close(); + fs?.Dispose(); + return; + } + long fileSize = fs.Length; + this.dlBytes += fileSize; + + // 如果本地端檔案大小 < 請求的檔案大小, 表示還沒有傳輸完成, 則進行請求下載 + if (fileSize < totalSize) + { + // 將文件的index起始位移至該檔案長度的end, 是作為斷點續傳的主要依據 (中斷後, 就會依照檔案長度的end作為起始進行寫入) + fs.Seek(fileSize, SeekOrigin.Begin); + + // 檔案請求下載 + var request = UnityWebRequest.Get(fileUrl); + request.SetRequestHeader("Range", $"bytes={fileSize}-{totalSize}"); + request.SendWebRequest().WithCancellation(this._bd.cts.Token).Forget(); + + int pos = 0; + while (true) + { + if (request == null) + { + Debug.Log($"Request is null. URL: {fileUrl}"); + break; + } + + // 網路中斷後主線程異常, 編輯器下無法正常運行, 不過發佈模式沒問題 + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log($"Request failed. URL: {fileUrl}"); + + this._retryDownload = true; + + fs?.Close(); + fs?.Dispose(); + request?.Dispose(); + + break; + } + + byte[] buffer = request?.downloadHandler?.data; // 持續接收資料 + if (buffer != null && buffer.Length > 0) + { + int fragLen = buffer.Length - pos; // buffer長度 - 記錄下來的pos = 資料分片長度 + fs.Write(buffer, pos, fragLen); // 進行持續寫入, ex: 資料分片長度(fragment length) = 10000(buffer.len) - 9800(pos) + this.dlSpeed += fragLen; // 資料分片長度 = download speed + this.dlBytes += fragLen; // 資料分片長度 = download bytes + + pos += fragLen; // 記錄已接收資料分片寫入的長度pos + fileSize += fragLen; // 記錄已接收資料分片的大小 + } + + // 最後將資料分片的size累加後, 如果有 >= totalSize 表示完成傳輸, 進行break + if ((fileSize >= totalSize) && request.isDone) break; + + // 等待一幀 + await UniTask.Yield(this._bd.cts.Token); + } + } + // 如果本地端大小 > 請求的檔案大小, 表示檔案大小異常, 則進行刪檔重新下載 + else + { + Debug.Log($"FileSize Error, Auto delete and download again. FileName: {dlFullName}"); + + // 先執行fileStream的釋放 (主要這樣才能進行File.Delete) + fs?.Close(); + fs?.Dispose(); + + // 檔案異常進行刪除檔案, 並且將上次本地端檔案大小累加至dlBytes從中扣除 + File.Delete(filePath); + this.dlBytes -= fileSize; + + // 等待一幀 + await UniTask.Yield(this._bd.cts.Token); + + // 最後再嘗試下載一次 (重新下載) + this.DownloadFile(dlFile, dlFileName).Forget(); + return; + } + + fs?.Close(); + fs?.Dispose(); + + if (this._retryDownload) return; + + Debug.Log($"FileDownload Completed. FileName: {dlFullName}"); + this.dlCount += 1; + + // 執行下一個檔案的下載 + this.NextFileDownload().Forget(); + } + + /// + /// 執行下一個要下載的檔案 (表示每當一個檔案下載完成後, 則調用執行下一個下載) + /// + /// + protected async UniTask NextFileDownload() + { + if (this._stackWaitFiles.Count > 0) + { + await UniTask.Yield(this._bd.cts.Token); + + var fileName = this._stackWaitFiles.Pop(); + + this.DownloadFile(this._bd.GetUpdateCfg().RES_FILES[fileName], fileName).Forget(); + } + } + + /// + /// 計算下載資訊 (Per Seconds) + /// + /// + protected async UniTask CalculateDownloadInfo(Progression progression) + { + while (true) + { + // 如果allSize = 0, 直接歸零 + progression handle, 最後break + if (this._allSizeBytes == 0) + { + this.dlSpeed = 0; + this.dlProgress = 1; + progression?.Invoke(this.dlProgress, this.dlCount, this._bd.GetBytesToString(this.dlBytes), this._bd.GetSpeedBytesToString(this.dlSpeed)); + break; + } + + // 計算進度 (pr = current size / total size) + var pr = (float)this.dlBytes / this._allSizeBytes; + this.dlProgress = pr; + + progression?.Invoke(this.dlProgress, this.dlCount, this._bd.GetBytesToString(this.dlBytes), this._bd.GetSpeedBytesToString(this.dlSpeed)); + Debug.Log($"下載進度: {this.dlProgress.ToString("f2")}%, 下載速度: {this._bd.GetSpeedBytesToString(this.dlSpeed)}"); + + this.dlSpeed = 0; // 在progression handle後才進行歸零 + + // 完成後 (以上已經執行歸零程序了), 也執行progression handle, 最後break + if (pr >= 1) + { + progression?.Invoke(this.dlProgress, this.dlCount, this._bd.GetBytesToString(this.dlBytes), this._bd.GetSpeedBytesToString(this.dlSpeed)); + Debug.Log($"下載進度: {this.dlProgress.ToString("f2")}%, 下載速度: {this._bd.GetSpeedBytesToString(this.dlSpeed)}"); + break; + } + + // 每隔一秒執行一次 (下載速率需要歸零) + await UniTask.Delay(TimeSpan.FromSeconds(1), ignoreTimeScale: true, PlayerLoopTiming.FixedUpdate, this._bd.cts.Token); + } + } + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs.meta new file mode 100644 index 00000000..b7600393 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/Downloader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 392a2a30ead9ad84b95f2db4ebb35fb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs new file mode 100644 index 00000000..b0faec3b --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs @@ -0,0 +1,346 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using UnityEngine; + +namespace AssetLoader.Bundle +{ + public class FileCryptogram + { + public class Offset + { + /// + /// Offset 加密檔案 【檢測OK】 + /// + /// + /// + public static bool OffsetEncryptFile(string sourceFile, int dummySize = 0) + { + byte[] dataBytes = File.ReadAllBytes(sourceFile); + int totalLength = dataBytes.Length + dummySize; + byte[] offsetDatabytes = new byte[totalLength]; + for (int i = 0; i < totalLength; i++) + { + if (dummySize > 0 && i < dummySize) offsetDatabytes[i] = (byte)(UnityEngine.Random.Range(0, 256)); + else offsetDatabytes[i] = dataBytes[i - dummySize]; + } + File.WriteAllBytes(sourceFile, offsetDatabytes); + + return true; + } + + /// + /// Offset 解密檔案 【檢測OK】 + /// + /// + /// + public static bool OffsetDecryptFile(string encryptFile, int dummySize = 0) + { + byte[] dataBytes = File.ReadAllBytes(encryptFile); + int totalLength = dataBytes.Length - dummySize; + byte[] offsetDatabytes = new byte[totalLength]; + Buffer.BlockCopy(dataBytes, dummySize, offsetDatabytes, 0, totalLength); + File.WriteAllBytes(encryptFile, offsetDatabytes); + + return true; + } + + /// + /// Offset 解密檔案 【檢測OK】 + /// + /// + /// + public static bool OffsetDecryptFile(ref byte[] encryptBytes, int dummySize = 0) + { + int totalLength = encryptBytes.Length - dummySize; + byte[] offsetDatabytes = new byte[totalLength]; + Buffer.BlockCopy(encryptBytes, dummySize, offsetDatabytes, 0, totalLength); + encryptBytes = offsetDatabytes; + + return true; + } + + /// + /// 返回 Offset 解密 Stream 【檢測OK】 + /// + /// + /// + public static Stream OffsetDecryptStream(string encryptFile, int dummySize = 0) + { + var fsDescrypt = new FileStream(encryptFile, FileMode.Open, FileAccess.Read, FileShare.None); + var dataBytes = new byte[fsDescrypt.Length - dummySize]; + fsDescrypt.Seek(dummySize, SeekOrigin.Begin); + fsDescrypt.Read(dataBytes, 0, dataBytes.Length); + fsDescrypt.Dispose(); + + var msDescrypt = new MemoryStream(); + for (int i = 0; i < dataBytes.Length; i++) + { + msDescrypt.WriteByte(dataBytes[i]); + } + + return msDescrypt; + } + } + + public class XOR + { + /// + /// XOR 加密檔案 【檢測OK】 + /// + /// + /// + public static bool XorEncryptFile(string sourceFile, byte key = 0) + { + byte[] dataBytes = File.ReadAllBytes(sourceFile); + for (int i = 0; i < dataBytes.Length; i++) + { + dataBytes[i] ^= key; + } + File.WriteAllBytes(sourceFile, dataBytes); + + return true; + } + + /// + /// XOR 解密檔案 【檢測OK】 + /// + /// + /// + public static bool XorDecryptFile(byte[] encryptBytes, byte key = 0) + { + for (int i = 0; i < encryptBytes.Length; i++) + { + encryptBytes[i] ^= key; + } + + return true; + } + + /// + /// XOR 解密檔案 【檢測OK】 + /// + /// + /// + public static bool XorDecryptFile(string encryptFile, byte key = 0) + { + byte[] dataBytes = File.ReadAllBytes(encryptFile); + for (int i = 0; i < dataBytes.Length; i++) + { + dataBytes[i] ^= key; + } + File.WriteAllBytes(encryptFile, dataBytes); + + return true; + } + + /// + /// 返回 XOR 解密 Stream 【檢測OK】 + /// + /// + /// + public static Stream XorDecryptStream(string encryptFile, byte key = 0) + { + var fsDescrypt = new FileStream(encryptFile, FileMode.Open, FileAccess.Read, FileShare.None); + var dataBytes = new byte[fsDescrypt.Length]; + fsDescrypt.Read(dataBytes, 0, dataBytes.Length); + fsDescrypt.Dispose(); + + var msDescrypt = new MemoryStream(); + for (int i = 0; i < dataBytes.Length; i++) + { + dataBytes[i] ^= key; + msDescrypt.WriteByte(dataBytes[i]); + } + + return msDescrypt; + } + } + + public class AES + { + /// + /// AES 加密檔案 【檢測OK】 + /// + /// + /// + /// + /// + public static bool AesEncryptFile(string sourceFile, string key = null, string iv = null) + { + if (string.IsNullOrEmpty(sourceFile) || !File.Exists(sourceFile)) + { + return false; + } + + try + { + AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider(); + byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(key)); + byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(iv)); + aes.Key = keyData; + aes.IV = ivData; + + using (FileStream fsSource = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.None)) + { + byte[] dataBytes = new byte[fsSource.Length]; + fsSource.Read(dataBytes, 0, dataBytes.Length); + fsSource.Dispose(); + File.Delete(sourceFile); + + using (FileStream fsEncrypt = new FileStream(sourceFile, FileMode.Create, FileAccess.Write)) + { + //檔案加密 + using (CryptoStream cs = new CryptoStream(fsEncrypt, aes.CreateEncryptor(), CryptoStreamMode.Write)) + { + cs.Write(dataBytes, 0, dataBytes.Length); + cs.FlushFinalBlock(); + } + } + } + } + catch (Exception ex) + { + Debug.Log($"File Encrypt failed. {ex}"); + return false; + } + + return true; + } + + /// + /// AES 解密檔案 【檢測OK】 + /// + /// + /// + /// + /// + public static bool AesDecryptFile(byte[] encryptBytes, string key = null, string iv = null) + { + try + { + AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider(); + byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(key)); + byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(iv)); + aes.Key = keyData; + aes.IV = ivData; + + using (MemoryStream msEncrypt = new MemoryStream(encryptBytes)) + { + // 檔案解密 + using (CryptoStream cs = new CryptoStream(msEncrypt, aes.CreateDecryptor(), CryptoStreamMode.Read)) + { + int idx = 0; + int data; + while ((data = cs.ReadByte()) != -1) + { + encryptBytes[idx] = (byte)data; + idx++; + } + } + } + } + catch (Exception ex) + { + Debug.Log($"File Decrypt failed. {ex}"); + return false; + } + + return true; + } + + /// + /// AES 解密檔案 【檢測OK】 + /// + /// + /// + /// + /// + public static bool AesDecryptFile(string encryptFile, string key = null, string iv = null) + { + try + { + AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider(); + byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(key)); + byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(iv)); + aes.Key = keyData; + aes.IV = ivData; + + using (FileStream fsSource = new FileStream(encryptFile, FileMode.Open, FileAccess.Read, FileShare.None)) + { + byte[] dataBytes = new byte[fsSource.Length]; + fsSource.Read(dataBytes, 0, dataBytes.Length); + fsSource.Dispose(); + File.Delete(encryptFile); + + using (FileStream fsDecrypt = new FileStream(encryptFile, FileMode.Create, FileAccess.Write)) + { + //檔案解密 + using (CryptoStream cs = new CryptoStream(fsDecrypt, aes.CreateDecryptor(), CryptoStreamMode.Write)) + { + cs.Write(dataBytes, 0, dataBytes.Length); + cs.FlushFinalBlock(); + } + } + } + } + catch (Exception ex) + { + Debug.Log($"File Decrypt failed. {ex}"); + return false; + } + + return true; + } + + /// + /// 返回 AES 解密 Stream 【檢測OK】 + /// + /// + /// + /// + /// + public static Stream AesDecryptStream(string encryptFile, string key = null, string iv = null) + { + MemoryStream msDecrypt; + + try + { + AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider(); + byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(key)); + byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(iv)); + aes.Key = keyData; + aes.IV = ivData; + + using (FileStream fsDecrypt = new FileStream(encryptFile, FileMode.Open, FileAccess.Read, FileShare.None)) + { + // 檔案解密 + using (CryptoStream cs = new CryptoStream(fsDecrypt, aes.CreateDecryptor(), CryptoStreamMode.Read)) + { + msDecrypt = new MemoryStream(); + int data; + while ((data = cs.ReadByte()) != -1) msDecrypt.WriteByte((byte)data); + } + } + + } + catch (Exception ex) + { + Debug.Log($"File Decrypt failed. {ex}"); + return null; + } + + return msDecrypt; + } + } + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs.meta new file mode 100644 index 00000000..2df2a2be --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/FileCryptogram.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 094fe694d627df842a55bacafd052a48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher.meta new file mode 100644 index 00000000..32bdd5bf --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f271a48eddee58a47a0fce0b215ed244 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base.meta new file mode 100644 index 00000000..7ff4ffd8 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 103b6eb2a1292e344a948b29639cb3a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs new file mode 100644 index 00000000..28b334ea --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs @@ -0,0 +1,32 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader.AssetCacher +{ + public abstract class AssetCache : ICache + { + protected Dictionary _cacher; + + public float reqSize { get; protected set; } + + public float totalSize { get; protected set; } + + public int Count { get { return this._cacher.Count; } } + + public abstract bool HasInCache(string name); + + public abstract T GetFromCache(string name); + + public abstract UniTask PreloadInCache(string name, Progression progression); + + public abstract UniTask PreloadInCache(string[] names, Progression progression); + + public abstract void ReleaseFromCache(string name); + + public abstract void ReleaseCache(); + + public abstract UniTask GetAssetsLength(params string[] names); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs.meta new file mode 100644 index 00000000..c1f0c5c5 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b5e88b5a9aa1ed4494ad12b071e40ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs new file mode 100644 index 00000000..a12df9ce --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader.AssetObject +{ + public class AssetObject + { + public int refCount { get; protected set; } + + public void AddRef() + { + this.refCount++; + } + + public void DelRef() + { + this.refCount--; + } + } + + public class ResourcePack : AssetObject + { + public string assetName = ""; + public Object asset; + + public T GetAsset() where T : Object + { + return (T)this.asset; + } + + ~ResourcePack() + { + this.assetName = null; + this.asset = null; + } + } + + public class BundlePack : AssetObject + { + public string bundleName = ""; + public AssetBundle assetBundle; + + public T GetAsset(string assetName) where T : Object + { + return this.assetBundle.LoadAsset(assetName); + } + + ~BundlePack() + { + this.bundleName = null; + this.assetBundle = null; + } + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs.meta new file mode 100644 index 00000000..fa012aec --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/Base/AssetObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00f5b957deaeb7241b0718cb45e11829 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs new file mode 100644 index 00000000..93afc1a2 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs @@ -0,0 +1,1333 @@ +using AssetLoader; +using AssetLoader.AssetCacher; +using AssetLoader.AssetObject; +using AssetLoader.Bundle; +using Cysharp.Threading.Tasks; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine; +using UnityEngine.Networking; + +public class CacheBundle : AssetCache, IBundle +{ + protected HashSet _hashBundleLoadingFlags = new HashSet(); + + private static CacheBundle _instance = null; + public static CacheBundle GetInstance() + { + if (_instance == null) _instance = new CacheBundle(); + return _instance; + } + + public CacheBundle() + { + this._cacher = new Dictionary(); + } + + public override bool HasInCache(string bundleName) + { + bundleName = bundleName.ToLower(); + + return this._cacher.ContainsKey(bundleName); + } + + public bool HasInBundleLoadingFlags(string bundleName) + { + if (string.IsNullOrEmpty(bundleName)) return false; + return this._hashBundleLoadingFlags.Contains(bundleName); + } + + public override BundlePack GetFromCache(string bundleName) + { + bundleName = bundleName.ToLower(); + + if (this.HasInCache(bundleName)) + { + if (this._cacher.TryGetValue(bundleName, out BundlePack bundlePack)) return bundlePack; + } + + return null; + } + + /// + /// 預加載Bundle至快取中 + /// + /// + /// + /// + public override async UniTask PreloadInCache(string bundleName, Progression progression = null) + { +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) return; +#endif + + bundleName = bundleName?.ToLower(); + + if (string.IsNullOrEmpty(bundleName)) return; + + // 如果有進行Loading標記後, 直接return; + if (this.HasInBundleLoadingFlags(bundleName)) + { + Debug.Log($"ab: {bundleName} Loading..."); + return; + } + + // 先設置加載進度 + this.reqSize = 0; // 會由LoadBundlePack累加, 所以需歸0 + this.totalSize = await this.GetAssetsLength(bundleName); // 返回當前要預加載的總大小 + + // Bundle Loading標記 + this._hashBundleLoadingFlags.Add(bundleName); + + // 如果有在快取中就不進行預加載 + if (this.HasInCache(bundleName)) + { + // 在快取中請求大小就直接指定為資源總大小 (單個) + this.reqSize = this.totalSize; + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + // 移除標記 + this._hashBundleLoadingFlags.Remove(bundleName); + return; + } + + var bundlePack = await this.LoadBundlePack(bundleName, progression); + if (bundlePack != null) + { + if (!this.HasInCache(bundleName)) this._cacher.Add(bundleName, bundlePack); + + // 取得主要的Menifest中的AssetBundleManifest (因為記錄著所有資源的依賴性) + var manifest = await this.GetManifest(); + if (manifest != null) + { + string[] dependencies = manifest.GetAllDependencies(bundleName); + for (int i = 0; i < dependencies.Length; i++) + { + if (this.HasInCache(dependencies[i])) continue; + + BundlePack dependBundlePack = await this.LoadBundlePack(dependencies[i], progression); + if (dependBundlePack != null) + { + // skipping duplicate keys + if (!this.HasInCache(dependencies[i])) this._cacher.Add(dependencies[i], dependBundlePack); + } + } + } + } + + // 移除標記 + this._hashBundleLoadingFlags.Remove(bundleName); + + await UniTask.Yield(); + + Debug.Log("【預加載】 => 當前<< CacheBundle >>快取數量 : " + this.Count); + } + + public override async UniTask PreloadInCache(string[] bundleNames, Progression progression = null) + { +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) return; +#endif + + if (bundleNames == null || bundleNames.Length == 0) return; + + // 先設置加載進度 + this.reqSize = 0; // 會由LoadBundlePack累加, 所以需歸0 + this.totalSize = await this.GetAssetsLength(bundleNames); // 返回當前要預加載的總大小 + + for (int i = 0; i < bundleNames.Length; i++) + { + var bundleName = bundleNames[i]?.ToLower(); + + if (string.IsNullOrEmpty(bundleName)) continue; + + // 如果有進行Loading標記後, 直接return; + if (this.HasInBundleLoadingFlags(bundleName)) + { + Debug.Log($"ab: {bundleName} Loading..."); + continue; + } + + // Bundle Loading標記 + this._hashBundleLoadingFlags.Add(bundleName); + + // 如果有在快取中就不進行預加載 + if (this.HasInCache(bundleName)) + { + // 在快取中請求進度大小需累加當前資源的總size (因為迴圈) + this.reqSize += await this.GetAssetsLength(bundleName); + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + // 移除標記 + this._hashBundleLoadingFlags.Remove(bundleName); + continue; + } + + // 開始進行預加載 + var bundlePack = await this.LoadBundlePack(bundleName, progression); + if (bundlePack != null) + { + if (!this.HasInCache(bundleName)) this._cacher.Add(bundleName, bundlePack); + + // 取得主要的Menifest中的AssetBundleManifest (因為記錄著所有資源的依賴性) + var manifest = await this.GetManifest(); + if (manifest != null) + { + string[] dependencies = manifest.GetAllDependencies(bundleName); + for (int j = 0; j < dependencies.Length; j++) + { + if (this.HasInCache(dependencies[j])) continue; + + BundlePack dependBundlePack = await this.LoadBundlePack(dependencies[j], progression); + if (dependBundlePack != null) + { + // skipping duplicate keys + if (!this.HasInCache(dependencies[j])) this._cacher.Add(dependencies[j], dependBundlePack); + } + } + } + } + + // 移除標記 + this._hashBundleLoadingFlags.Remove(bundleName); + + await UniTask.Yield(); + + Debug.Log($"【預加載】 => 當前<< CacheBundle >>快取數量 : " + this.Count); + } + } + + /// + /// [使用計數管理] 載入Bundle => 會優先從快取中取得Bundle, 如果快取中沒有才進行Bundle加載 + /// + /// + /// + /// + /// + /// + /// + public async UniTask Load(string bundleName, string assetName, bool dependency = true, Progression progression = null) where T : Object + { + bundleName = bundleName.ToLower(); + + BundlePack bundlePack = null; + BundlePack dependBundlePack; + T asset; + +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) + { + asset = this.LoadEditorAsset(bundleName, assetName); + return asset; + } +#endif + + // 如果有進行Loading標記後, 直接return; + if (this.HasInBundleLoadingFlags(bundleName)) + { + Debug.Log($"ab: {bundleName} Loading..."); + return null; + } + + // Bundle Loading標記 + this._hashBundleLoadingFlags.Add(bundleName); + + // 先設置加載進度 + this.reqSize = 0; + this.totalSize = await this.GetAssetsLength(bundleName); + + // 先從快取拿, 以下判斷沒有才執行加載 + bundlePack = this.GetFromCache(bundleName); + + // 加載Bundle包中的資源 + if (bundlePack == null) + { + bundlePack = await this.LoadBundlePack(bundleName, progression); + asset = bundlePack?.GetAsset(assetName); + + if (bundlePack != null && asset != null) + { + // skipping duplicate keys + if (!this.HasInCache(bundleName)) this._cacher.Add(bundleName, bundlePack); + } + } + else + { + // 直接更新進度 + this.reqSize = this.totalSize; + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + // 直接取得Bundle中的資源 + asset = bundlePack.GetAsset(assetName); + } + + if (asset != null) + { + // 主資源引用計數++ + bundlePack.AddRef(); + + // 判斷是否加載依賴資源 (要先確定有找到Bundle包內的資源才進行) + if (dependency) + { + // 取得主要的Menifest中的AssetBundleManifest (因為記錄著所有資源的依賴性) + var manifest = await this.GetManifest(); + if (manifest != null) + { + string[] dependencies = manifest.GetAllDependencies(bundleName); + for (int i = 0; i < dependencies.Length; i++) + { + var depBundelPack = this.GetFromCache(dependencies[i]); + if (depBundelPack != null) + { + // 依賴資源引用計數++ + depBundelPack.AddRef(); + continue; + } + + dependBundlePack = await this.LoadBundlePack(dependencies[i], progression); + if (dependBundlePack != null) + { + // skipping duplicate keys + if (!this.HasInCache(dependencies[i])) this._cacher.Add(dependencies[i], dependBundlePack); + } + } + } + } + } + + Debug.Log("【載入】 => 當前<< CacheBundle >>快取數量 : " + this.Count); + + this._hashBundleLoadingFlags.Remove(bundleName); + + return asset; + } + + /// + /// [使用計數管理] 從快取【釋放】單個Bundle (釋放Bundle記憶體, 連動銷毀實例對象也會 Missing 場景上有引用的對象) + /// + /// + public override void ReleaseFromCache(string bundleName) + { +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) return; +#endif + + bundleName = bundleName.ToLower(); + + if (this.HasInBundleLoadingFlags(bundleName)) + { + Debug.Log($"ab: {bundleName} Loading..."); + return; + } + + // 主資源 + if (this.HasInCache(bundleName)) + { + // 主資源引用計數-- + this._cacher[bundleName].DelRef(); + if (this._cacher[bundleName].refCount <= 0) + { + this._cacher[bundleName].assetBundle.Unload(true); + this._cacher[bundleName] = null; + this._cacher.Remove(bundleName); + } + } + + // 依賴資源 + var manifest = this._manifest; + string[] dependencies = manifest.GetAllDependencies(bundleName); + for (int i = 0; i < dependencies.Length; i++) + { + if (this.HasInCache(dependencies[i])) + { + // 依賴資源引用計數-- + this._cacher[dependencies[i]].DelRef(); + if (this._cacher[dependencies[i]].refCount <= 0) + { + this._cacher[dependencies[i]].assetBundle.Unload(true); + this._cacher[dependencies[i]] = null; + this._cacher.Remove(dependencies[i]); + } + } + } + + Debug.Log("【單個釋放】 => 當前<< CacheBundle >>快取數量 : " + this.Count); + } + + /// + /// [強制釋放] 從快取中【釋放】全部Bundle (釋放Bundle記憶體, 連動銷毀實例對象也會 Missing 場景上有引用的對象) + /// + public override void ReleaseCache() + { +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) return; +#endif + + if (this.Count == 0) return; + + // 強制釋放全部快取與資源 + foreach (var bundleName in this._cacher.Keys.ToArray()) + { + if (this.HasInBundleLoadingFlags(bundleName)) + { + Debug.Log($"ab: {bundleName} Loading..."); + continue; + } + + // 主資源 + if (this.HasInCache(bundleName)) + { + this._cacher[bundleName].assetBundle.Unload(true); + this._cacher[bundleName] = null; + this._cacher.Remove(bundleName); + } + + // 依賴資源 + var manifest = this._manifest; + string[] dependencies = manifest.GetAllDependencies(bundleName); + for (int i = 0; i < dependencies.Length; i++) + { + if (this.HasInCache(dependencies[i])) + { + this._cacher[dependencies[i]].assetBundle.Unload(true); + this._cacher[dependencies[i]] = null; + this._cacher.Remove(dependencies[i]); + } + } + } + + this._cacher.Clear(); + AssetBundle.UnloadAllAssetBundles(true); + + Debug.Log("【全部釋放】 => 當前<< CacheBundle >>快取數量 : " + this.Count); + } + + public async UniTask LoadBundlePack(string fileName, Progression progression) + { + fileName = fileName.ToLower(); + + BundlePack bundlePack = new BundlePack(); + bundlePack.bundleName = fileName; + +#if UNITY_STANDALONE_WIN + if (BundleConfig.bBundleStreamMode) + { + // 解密方式 + string cryptogramType = BundleConfig.cryptogramArgs[0].ToUpper(); + + Stream fs; + switch (cryptogramType) + { + case BundleConfig.CryptogramType.NONE: + fs = new FileStream(this.GetFilePathFromStreamingAssetsOrSavePath(fileName), FileMode.Open, FileAccess.Read, FileShare.None); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.OFFSET: + fs = FileCryptogram.Offset.OffsetDecryptStream + ( + this.GetFilePathFromStreamingAssetsOrSavePath(fileName), + System.Convert.ToInt32((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.XOR: + fs = FileCryptogram.XOR.XorDecryptStream + ( + this.GetFilePathFromStreamingAssetsOrSavePath(fileName), + System.Convert.ToByte((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.AES: + fs = FileCryptogram.AES.AesDecryptStream + ( + this.GetFilePathFromStreamingAssetsOrSavePath(fileName), + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[1] : string.Empty, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[2] : string.Empty + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + } + } + else + { + // 解密方式 + string cryptogramType = BundleConfig.cryptogramArgs[0].ToUpper(); + + byte[] bytes = File.ReadAllBytes(this.GetFilePathFromStreamingAssetsOrSavePath(fileName)); + switch (cryptogramType) + { + case BundleConfig.CryptogramType.NONE: + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.OFFSET: + FileCryptogram.Offset.OffsetDecryptFile + ( + ref bytes, + System.Convert.ToInt32((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.XOR: + FileCryptogram.XOR.XorDecryptFile + ( + bytes, + System.Convert.ToByte((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.AES: + FileCryptogram.AES.AesDecryptFile + ( + bytes, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[1] : string.Empty, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[2] : string.Empty + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + } + } +#endif + +#if UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL + // 使用[文件流]加載方式, 只能存在於Persistent的路徑 (因為StreamingAssets只使用UnityWebRequest方式請求) + if (BundleConfig.bBundleStream && !this.HasInStreamingAssets(fileName)) + { + // 解密方式 + string cryptogramType = BundleConfig.cryptogramArgs[0].ToUpper(); + + Stream fs; + switch (cryptogramType) + { + case BundleConfig.CryptogramType.NONE: + fs = new FileStream(this.GetFilePathFromSavePath(fileName), FileMode.Open, FileAccess.Read, FileShare.None, 1024 * 4, false); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.OFFSET: + fs = FileCryptogram.Offset.OffsetDecryptStream + ( + this.GetFilePathFromSavePath(fileName), + System.Convert.ToInt32((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.XOR: + fs = FileCryptogram.XOR.XorDecryptStream + ( + this.GetFilePathFromSavePath(fileName), + System.Convert.ToByte((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.AES: + fs = FileCryptogram.AES.AesDecryptStream + ( + this.GetFilePathFromSavePath(fileName), + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[1] : string.Empty, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[2] : string.Empty + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromStreamAsync(fs); + { + var req = AssetBundle.LoadFromStreamAsync(fs); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + break; + } + + await UniTask.Yield(); + } + } + break; + } + } + // 使用[內存]加載方式, 會判斷資源如果不在StreamingAssets中就從Persistent中加載 (反之) + else + { + if (!this.HasInStreamingAssets(fileName)) + { + // 解密方式 + string cryptogramType = BundleConfig.cryptogramArgs[0].ToUpper(); + + byte[] bytes = File.ReadAllBytes(this.GetFilePathFromSavePath(fileName)); + switch (cryptogramType) + { + case BundleConfig.CryptogramType.NONE: + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.OFFSET: + FileCryptogram.Offset.OffsetDecryptFile + ( + ref bytes, + System.Convert.ToInt32((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.XOR: + FileCryptogram.XOR.XorDecryptFile + ( + bytes, + System.Convert.ToByte((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.AES: + FileCryptogram.AES.AesDecryptFile + ( + bytes, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[1] : string.Empty, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[2] : string.Empty + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + } + } + else + { + // 解密方式 + string cryptogramType = BundleConfig.cryptogramArgs[0].ToUpper(); + + byte[] bytes = await this.FileRequest(this.GetFilePathFromStreamingAssets(fileName)); + switch (cryptogramType) + { + case BundleConfig.CryptogramType.NONE: + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.OFFSET: + FileCryptogram.Offset.OffsetDecryptFile + ( + ref bytes, + System.Convert.ToInt32((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.XOR: + FileCryptogram.XOR.XorDecryptFile + ( + bytes, + System.Convert.ToByte((BundleConfig.cryptogramArgs.Length >= 2) ? BundleConfig.cryptogramArgs[1] : "0") + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + case BundleConfig.CryptogramType.AES: + FileCryptogram.AES.AesDecryptFile + ( + bytes, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[1] : string.Empty, + (BundleConfig.cryptogramArgs.Length >= 3) ? BundleConfig.cryptogramArgs[2] : string.Empty + ); + //bundlePack.assetBundle = await AssetBundle.LoadFromMemoryAsync(bytes); + //bytes = null; + { + var req = AssetBundle.LoadFromMemoryAsync(bytes); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + bundlePack.assetBundle = req.assetBundle; + bytes = null; + break; + } + + await UniTask.Yield(); + } + } + break; + } + } + } +#endif + + if (!string.IsNullOrEmpty(bundlePack.bundleName) && bundlePack.assetBundle != null) + { + Debug.Log($@"Load AssetBundle. bundleName: {bundlePack.bundleName}"); + return bundlePack; + } + + bundlePack = null; + return bundlePack; + } + + /// + /// 檔案請求 (Android, iOS, H5) + /// + /// + /// + public async UniTask FileRequest(string url) + { + try + { + var request = UnityWebRequest.Get(url); + await request.SendWebRequest(); + + if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) + { + Debug.Log($"Request failed, URL: {url}"); + request.Dispose(); + + return new byte[] { }; + } + + byte[] bytes = request.downloadHandler.data; + request.Dispose(); + + return bytes; + } + catch + { + Debug.Log($"Request failed, URL: {url}"); + return new byte[] { }; + } + } + + public override async UniTask GetAssetsLength(params string[] bundleNames) + { +#if UNITY_EDITOR + if (BundleConfig.bAssetDatabaseMode) return 0; +#endif + + int length = bundleNames.Length; + + var manifest = await this.GetManifest(); + foreach (var bundleName in bundleNames) + { + string[] dependencies = manifest.GetAllDependencies(bundleName); + length += dependencies.Length; + } + + return length; + } + + /// + /// 載入資源包的 Manifest (用於引用依賴資源) + /// + /// + public async UniTask LoadManifest() + { + string manifestName = BundleConfig.GetManifestFileName(); + BundlePack bundlePack = await this.LoadBundlePack(manifestName, null); + AssetBundleManifest manifest = bundlePack.assetBundle.LoadAsset("AssetBundleManifest"); + + return manifest; + } + + private AssetBundleManifest _manifest = null; + /// + /// AssetBundleManifest (記錄著所有資源的依賴性) + /// + /// + public async UniTask GetManifest() + { + if (this._manifest == null) + { + this._manifest = await this.LoadManifest(); + } + + return this._manifest; + } + + /// + /// 自動判斷返回 PersistentData or StreamingAssets 中的資源路徑 + /// + /// + /// + public string GetFilePathFromStreamingAssetsOrSavePath(string fileName) + { + fileName = fileName.ToLower(); + + if (!this.HasInStreamingAssets(fileName)) return this.GetFilePathFromSavePath(fileName); + else return this.GetFilePathFromStreamingAssets(fileName); + } + + /// + /// 取得位於 StreamingAssets 中的資源路徑 + /// + /// + /// + public string GetFilePathFromStreamingAssets(string fileName) + { + fileName = fileName.ToLower(); + // 透過配置檔取得完整檔案目錄名稱 (StreamingAssets中的配置檔) + string fullPathName = Path.Combine(Application.streamingAssetsPath, fileName); + return fullPathName; + } + + /// + /// 取得位於 PersistentData 中的資源路徑 + /// + /// + /// + public string GetFilePathFromSavePath(string fileName) + { + fileName = fileName.ToLower(); + // 透過配置檔取得完整檔案目錄名稱 (Local中的記錄配置黨) + string fullPathName = Path.Combine(BundleConfig.GetLocalDlFileSaveDirectory(), fileName); + return fullPathName; + } + + /// + /// 透過配置檔返回是否有資源位於 StreamingAssets + /// + /// + /// + public bool HasInStreamingAssets(string fileName) + { + fileName = fileName.ToLower(); + + if (BundleDistributor.GetInstance().GetRecordCfg() != null) + { + if (BundleDistributor.GetInstance().GetRecordCfg().HasFile(fileName)) return false; + } + + return true; + } + +#if UNITY_EDITOR + /// + /// 直接讀取 AssetDatabase 拿取資源, 為了加快開發效率, 無需每次經過打包 (Editor Only) + /// + /// + /// + /// + /// + /// + public T LoadEditorAsset(string bundleName, string assetName) where T : Object + { + bundleName = bundleName.ToLower(); + + // 取得資源位於AssetDatabase中的路徑 + var assetPaths = UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(bundleName, assetName); + if (assetPaths.Length <= 0) + { + throw new System.Exception($@"Cannot found a asset path from AssetDatabase => bundleName: {bundleName}, assetName: {assetName}"); + } + string assetPath = assetPaths[0]; + + // 從路徑中取得資源 + T resObj = UnityEditor.AssetDatabase.LoadAssetAtPath(assetPath); + + Debug.Log($@"Load Asset From Editor AssetDatabase. bundleName: {bundleName}, assetName: {assetName}"); + + return resObj; + } +#endif +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs.meta new file mode 100644 index 00000000..67594190 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 585b337c74bd74a4c8a8b991300be9fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs new file mode 100644 index 00000000..eb8af716 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs @@ -0,0 +1,285 @@ +using AssetLoader; +using AssetLoader.AssetCacher; +using AssetLoader.AssetObject; +using Cysharp.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class CacheResource : AssetCache, IResource +{ + private static CacheResource _instance = null; + public static CacheResource GetInstance() + { + if (_instance == null) _instance = new CacheResource(); + return _instance; + } + + public CacheResource() + { + this._cacher = new Dictionary(); + } + + public override bool HasInCache(string assetName) + { + return this._cacher.ContainsKey(assetName); + } + + public override ResourcePack GetFromCache(string assetName) + { + if (this.HasInCache(assetName)) + { + if (this._cacher.TryGetValue(assetName, out ResourcePack resPack)) return resPack; + } + + return null; + } + + /// + /// 預加載資源至快取中 + /// + /// + /// + /// + public override async UniTask PreloadInCache(string assetName, Progression progression = null) + { + if (string.IsNullOrEmpty(assetName)) return; + + // 先初始加載進度 + this.reqSize = 0; + this.totalSize = await this.GetAssetsLength(assetName); + + // 如果有在快取中就不進行預加載 + if (this.HasInCache(assetName)) + { + // 在快取中請求大小就直接指定為資源總大小 (單個) + this.reqSize = this.totalSize; + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + return; + } + + ResourcePack resPack = new ResourcePack(); + { + var req = Resources.LoadAsync(assetName); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += ao.progress - lastSize; + lastSize += ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + resPack.assetName = assetName; + resPack.asset = req.asset; + break; + } + + await UniTask.Yield(); + } + } + + if (resPack != null) + { + // skipping duplicate keys + if (!this.HasInCache(assetName)) this._cacher.Add(assetName, resPack); + } + + Debug.Log("【預加載】 => 當前<< CacheResource >>快取數量 : " + this.Count); + } + + public override async UniTask PreloadInCache(string[] assetNames, Progression progression = null) + { + if (assetNames == null || assetNames.Length == 0) return; + + // 先初始加載進度 + this.reqSize = 0; + this.totalSize = await this.GetAssetsLength(assetNames); + + for (int i = 0; i < assetNames.Length; i++) + { + var assetName = assetNames[i]; + + if (string.IsNullOrEmpty(assetName)) continue; + + // 如果有在快取中就不進行預加載 + if (this.HasInCache(assetName)) + { + // 在快取中請求進度大小需累加當前資源的總size (因為迴圈) + this.reqSize += await this.GetAssetsLength(assetName); + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + continue; + } + + ResourcePack resPack = new ResourcePack(); + { + var req = Resources.LoadAsync(assetName); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + resPack.assetName = assetName; + resPack.asset = req.asset; + break; + } + + await UniTask.Yield(); + } + } + + if (resPack != null) + { + // skipping duplicate keys + if (!this.HasInCache(assetName)) this._cacher.Add(assetName, resPack); + } + + Debug.Log("【預加載】 => 當前<< CacheResource >>快取數量 : " + this.Count); + } + } + + /// + /// [使用計數管理] 載入資源 => 會優先從快取中取得資源, 如果快取中沒有才進行資源加載 + /// + /// + /// + /// + /// + public async UniTask Load(string assetName, Progression progression = null) where T : Object + { + // 初始加載進度 + this.reqSize = 0; + this.totalSize = await this.GetAssetsLength(assetName); + + // 先從快取拿 + ResourcePack resPack = this.GetFromCache(assetName); + + if (resPack == null) + { + resPack = new ResourcePack(); + { + var req = Resources.LoadAsync(assetName); + + float lastSize = 0; + while (req != null) + { + if (progression != null) + { + req.completed += (AsyncOperation ao) => + { + this.reqSize += (ao.progress - lastSize); + lastSize = ao.progress; + + progression.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + }; + } + + if (req.isDone) + { + resPack.assetName = assetName; + resPack.asset = req.asset as T; + break; + } + + await UniTask.Yield(); + } + } + + if (resPack != null) + { + // skipping duplicate keys + if (!this.HasInCache(assetName)) this._cacher.Add(assetName, resPack); + } + } + else + { + // 直接更新進度 + this.reqSize = this.totalSize; + // 處理進度回調 + progression?.Invoke(this.reqSize / this.totalSize, this.reqSize, this.totalSize); + } + + if (resPack.asset != null) + { + // 引用計數++ + resPack.AddRef(); + } + + Debug.Log("【載入】 => 當前<< CacheResource >>快取數量 : " + this.Count); + + return (T)resPack.asset; + } + + /// + /// [使用計數管理] 從快取【釋放】單個資源 (釋放快取, 並且釋放資源記憶體) + /// + /// + public override void ReleaseFromCache(string assetName) + { + if (this.HasInCache(assetName)) + { + // 引用計數-- + this._cacher[assetName].DelRef(); + if (this._cacher[assetName].refCount <= 0) + { + //Resources.(this._cacher[assetName].asset); // 刪除快取前, 釋放資源 + this._cacher[assetName] = null; + this._cacher.Remove(assetName); + Resources.UnloadUnusedAssets(); + } + } + + Debug.Log("【單個釋放】 => 當前<< CacheResource >>快取數量 : " + this.Count); + } + + /// + /// [強制釋放] 從快取中【釋放】全部資源 (釋放快取, 並且釋放資源記憶體) + /// + public override void ReleaseCache() + { + if (this.Count == 0) return; + + // 強制釋放快取與資源 + foreach (var assetName in this._cacher.Keys.ToArray()) + { + if (this.HasInCache(assetName)) + { + //Resources.UnloadAsset(this._cacher[assetName].asset); // 刪除快取前, 釋放資源 + this._cacher[assetName] = null; + this._cacher.Remove(assetName); + } + } + + this._cacher.Clear(); + Resources.UnloadUnusedAssets(); + + Debug.Log("【全部釋放】 => 當前<< CacheResource >>快取數量 : " + this.Count); + } + + public override async UniTask GetAssetsLength(params string[] assetNames) + { + return assetNames.Length; + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs.meta new file mode 100644 index 00000000..9050517c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71289cbc711fdf44884529e01444fddc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface.meta new file mode 100644 index 00000000..6480636e --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ceeab9744e2b17409597a60c34360c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher.meta new file mode 100644 index 00000000..4223d2db --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8e16bd03ea117242a18530fb2279a67 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs new file mode 100644 index 00000000..b6c5163c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs @@ -0,0 +1,19 @@ +using AssetLoader.AssetObject; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace AssetLoader +{ + public interface IBundle + { + UniTask Load(string bundleName, string assetName, bool dependencies = true, Progression progression = null) where T : Object; + + UniTask LoadBundlePack(string fileName, Progression progression); + + UniTask LoadManifest(); + + UniTask GetManifest(); + + UniTask FileRequest(string url); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs.meta new file mode 100644 index 00000000..ca690259 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IBundle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbe0dd215c0e5574492e8397b5b717bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs new file mode 100644 index 00000000..74aebf89 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs @@ -0,0 +1,26 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader +{ + public delegate void Progression(float progress, float reqSize, float totalSize); + + public interface ICache + { + bool HasInCache(string name); + + T GetFromCache(string name); + + UniTask PreloadInCache(string name, Progression progression); + + UniTask PreloadInCache(string[] names, Progression progression); + + void ReleaseFromCache(string name); + + void ReleaseCache(); + + UniTask GetAssetsLength(params string[] names); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs.meta new file mode 100644 index 00000000..d385d4f8 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/ICache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6d3f02e2ad36084881ca2ab1274e772 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs new file mode 100644 index 00000000..1ec984fe --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs @@ -0,0 +1,12 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader +{ + public interface IResource + { + UniTask Load(string assetName, Progression progression = null) where T : Object; + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs.meta new file mode 100644 index 00000000..69794310 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/Cacher/IResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 598ff6b23148a0e4e9f06433eda816d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher.meta new file mode 100644 index 00000000..78948324 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf6aa3b05cc6deb4384392d6012a6b32 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs new file mode 100644 index 00000000..19a17b2c --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs @@ -0,0 +1,17 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader +{ + public interface IKeyBundle + { + UniTask Load(int id, string bundleName, string assetName, Progression progression) where T : Object; + + UniTask LoadWithClone(int id, string bundleName, string assetName, Transform parent, Vector3? scale, Progression progression); + + UniTask LoadWithClone(int id, string bundleName, string assetName, Vector3 position, Quaternion rotation, Transform parent, Vector3? scale, Progression progression); + } +} + diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs.meta new file mode 100644 index 00000000..81583574 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyBundle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0c586456b0dd4648a6a9dfd66435e02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs new file mode 100644 index 00000000..d7f3ca3a --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs @@ -0,0 +1,24 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader +{ + public interface IKeyCache + { + bool HasInCache(int id, string name); + + void AddIntoCache(int id, string name); + + void DelFromCache(int id, string name); + + UniTask PreloadInCache(int id, string name, Progression progression); + + UniTask PreloadInCache(int id, string[] names, Progression progression); + + void ReleaseFromCache(int id, string name); + + void ReleaseCache(int id); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs.meta new file mode 100644 index 00000000..6ed55916 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3324baa1bcc53f54bbf9cdd44b61c6fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs new file mode 100644 index 00000000..70b3042f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs @@ -0,0 +1,17 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AssetLoader +{ + public interface IKeyResource + { + UniTask Load(int id, string assetName, Progression progression) where T : Object; + + UniTask LoadWithClone(int id, string assetName, Transform parent, Vector3? scale, Progression progression); + + UniTask LoadWithClone(int id, string assetName, Vector3 position, Quaternion rotation, Transform parent, Vector3? scale, Progression progression); + } +} + diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs.meta new file mode 100644 index 00000000..018e1be1 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Interface/KeyCacher/IKeyResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3725de771725514c8e79cbd18d89652 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher.meta new file mode 100644 index 00000000..11cf24e1 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93c94f43cfe2c1e43bf04fccd7d39608 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base.meta new file mode 100644 index 00000000..da40268f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95ab35820ec06d3478e601423c0db60c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs new file mode 100644 index 00000000..96cd569b --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs @@ -0,0 +1,89 @@ +using Cysharp.Threading.Tasks; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace AssetLoader.KeyCacher +{ + public class KeyGroup + { + public int id; + public string name; + public int refCount { get; protected set; } + + public void AddRef() + { + this.refCount++; + } + + public void DelRef() + { + this.refCount--; + } + } + + public abstract class KeyCache : IKeyCache + { + protected HashSet _keyCacher; + + public int Count { get { return this._keyCacher.Count; } } + + public KeyCache() + { + this._keyCacher = new HashSet(); + } + + public virtual bool HasInCache(int id, string name) + { + if (this._keyCacher.Count == 0) return false; + + foreach (var keyGroup in this._keyCacher.ToArray()) + { + if (keyGroup.id == id && keyGroup.name == name) return true; + } + + return false; + } + + public virtual KeyGroup GetFromCache(int id, string name) + { + if (this._keyCacher.Count == 0) return null; + + foreach (var keyGroup in this._keyCacher.ToArray()) + { + if (keyGroup.id == id && keyGroup.name == name) return keyGroup; + } + + return null; + } + + public virtual void AddIntoCache(int id, string name) + { + if (!this.HasInCache(id, name)) + { + KeyGroup keyGroup = new KeyGroup(); + keyGroup.id = id; + keyGroup.name = name; + this._keyCacher.Add(keyGroup); + } + } + + public virtual void DelFromCache(int id, string name) + { + if (this.HasInCache(id, name)) + { + var keyGroup = this.GetFromCache(id, name); + if (keyGroup != null) this._keyCacher.Remove(keyGroup); + } + } + + public abstract UniTask PreloadInCache(int id, string name, Progression progression); + + public abstract UniTask PreloadInCache(int id, string[] names, Progression progression); + + public abstract void ReleaseFromCache(int id, string name); + + public abstract void ReleaseCache(int id); + } +} \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs.meta new file mode 100644 index 00000000..e941f2ac --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/Base/KeyCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e6864b791bc6c94bba5146d7927e8ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs new file mode 100644 index 00000000..e709d7c3 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs @@ -0,0 +1,190 @@ +using AssetLoader; +using AssetLoader.AssetObject; +using AssetLoader.KeyCacher; +using Cysharp.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class KeyBundle : KeyCache, IKeyBundle +{ + private static KeyBundle _instance = null; + public static KeyBundle GetInstance() + { + if (_instance == null) _instance = new KeyBundle(); + return _instance; + } + + public KeyBundle() : base() { } + + /// + /// 【KeyBundle】資源預加載 + /// + /// + /// + /// + public override async UniTask PreloadInCache(int id, string bundleName, Progression progression = null) + { + if (string.IsNullOrEmpty(bundleName)) return; + + await CacheBundle.GetInstance().PreloadInCache(bundleName, progression); + if (CacheBundle.GetInstance().HasInCache(bundleName)) this.AddIntoCache(id, bundleName); + + Debug.Log("【預加載】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + } + + public override async UniTask PreloadInCache(int id, string[] bundleNames, Progression progression = null) + { + if (bundleNames == null || bundleNames.Length == 0) return; + + await CacheBundle.GetInstance().PreloadInCache(bundleNames, progression); + foreach (string bundleName in bundleNames) + { + if (string.IsNullOrEmpty(bundleName)) continue; + if (CacheBundle.GetInstance().HasInCache(bundleName)) this.AddIntoCache(id, bundleName); + } + + Debug.Log("【預加載】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + } + + /// + /// 【KeyBundle】資源加載 + /// + /// + /// + /// + /// + public async UniTask Load(int id, string bundleName, string assetName, Progression progression = null) where T : Object + { + T asset = null; + + asset = await CacheBundle.GetInstance().Load(bundleName, assetName, true, progression); + + if (asset != null) + { + this.AddIntoCache(id, bundleName); + var keyGroup = this.GetFromCache(id, bundleName); + if (keyGroup != null) keyGroup.AddRef(); + } + + Debug.Log("【載入】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + + return asset; + } + + /// + /// 【KeyBundle】資源加載並且Clone, 指定Parent, Scale + /// + /// + /// + /// + /// + /// + /// + public async UniTask LoadWithClone(int id, string bundleName, string assetName, Transform parent, Vector3? scale = null, Progression progression = null) + { + GameObject assetGo = null, instGo = null; + + assetGo = await CacheBundle.GetInstance().Load(bundleName, assetName, true, progression); + + if (assetGo != null) + { + this.AddIntoCache(id, bundleName); + var keyGroup = this.GetFromCache(id, bundleName); + if (keyGroup != null) keyGroup.AddRef(); + instGo = GameObject.Instantiate(assetGo, parent); + Vector3 localScale = (scale == null) ? instGo.transform.localScale : (Vector3)scale; + instGo.transform.localScale = localScale; + } + + Debug.Log("【載入 + Clone】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + + return instGo; + } + + /// + /// 【KeyBundle】資源加載並且Clone, 指定Position, Quternion, Parent, Scale + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async UniTask LoadWithClone(int id, string bundleName, string assetName, Vector3 position, Quaternion rotation, Transform parent, Vector3? scale = null, Progression progression = null) + { + GameObject assetGo = null, instGo = null; + + assetGo = await CacheBundle.GetInstance().Load(bundleName, assetName, true, progression); + + if (assetGo != null) + { + this.AddIntoCache(id, bundleName); + var keyGroup = this.GetFromCache(id, bundleName); + if (keyGroup != null) keyGroup.AddRef(); + instGo = GameObject.Instantiate(assetGo, parent); + instGo.transform.localPosition = position; + instGo.transform.localRotation = rotation; + Vector3 localScale = (scale == null) ? instGo.transform.localScale : (Vector3)scale; + instGo.transform.localScale = localScale; + } + + Debug.Log("【載入 + Clone】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + + return instGo; + } + + /// + /// 【釋放】索引Key快取, 並且釋放資源快取 + /// + /// + /// + public override void ReleaseFromCache(int id, string bundleName) + { + var keyGroup = this.GetFromCache(id, bundleName); + if (keyGroup != null) + { + keyGroup.DelRef(); + + // 使用引用計數釋放 + if (keyGroup.refCount <= 0) this.DelFromCache(id, keyGroup.name); + CacheBundle.GetInstance().ReleaseFromCache(keyGroup.name); + } + + Debug.Log("【單個釋放】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + } + + /// + /// 【釋放】全部索引Key快取, 並且釋放資源快取 + /// + public override void ReleaseCache(int id) + { + if (this._keyCacher.Count > 0) + { + foreach (var keyGroup in this._keyCacher.ToArray()) + { + if (keyGroup.id != id) continue; + + if (keyGroup.refCount <= 0) + { + CacheBundle.GetInstance().ReleaseFromCache(keyGroup.name); + } + else + { + // 依照計數次數釋放 + for (int i = 0; i < keyGroup.refCount; i++) + { + CacheBundle.GetInstance().ReleaseFromCache(keyGroup.name); + } + } + + // 完成後, 直接刪除快取 + this.DelFromCache(keyGroup.id, keyGroup.name); + } + } + + Debug.Log("【全部釋放】 => 當前<< KeyBundle >>快取數量 : " + this.Count); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs.meta new file mode 100644 index 00000000..c22a3d45 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyBundle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ef4a69a4a1362540b9b6f42164f25db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs new file mode 100644 index 00000000..d2bb8c1f --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs @@ -0,0 +1,187 @@ +using AssetLoader; +using AssetLoader.AssetObject; +using AssetLoader.KeyCacher; +using Cysharp.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class KeyResource : KeyCache, IKeyResource +{ + private static KeyResource _instance = null; + public static KeyResource GetInstance() + { + if (_instance == null) _instance = new KeyResource(); + return _instance; + } + + public KeyResource() : base() { } + + /// + /// 【KeyResource】資源預加載 + /// + /// + /// + /// + public override async UniTask PreloadInCache(int id, string assetName, Progression progression = null) + { + if (string.IsNullOrEmpty(assetName)) return; + + await CacheResource.GetInstance().PreloadInCache(assetName, progression); + if (CacheResource.GetInstance().HasInCache(assetName)) this.AddIntoCache(id, assetName); + + Debug.Log("【預加載】 => 當前<< KeyResource >>快取數量 : " + this.Count); + } + + public override async UniTask PreloadInCache(int id, string[] assetNames, Progression progression = null) + { + if (assetNames == null || assetNames.Length == 0) return; + + await CacheResource.GetInstance().PreloadInCache(assetNames, progression); + foreach (string assetName in assetNames) + { + if (string.IsNullOrEmpty(assetName)) continue; + if (CacheResource.GetInstance().HasInCache(assetName)) this.AddIntoCache(id, assetName); + } + + Debug.Log("【預加載】 => 當前<< KeyResource >>快取數量 : " + this.Count); + } + + /// + /// [計數管理] 【KeyResource】資源加載 + /// + /// + /// + /// + public async UniTask Load(int id, string assetName, Progression progression = null) where T : Object + { + T asset = null; + + asset = await CacheResource.GetInstance().Load(assetName, progression); + + if (asset != null) + { + this.AddIntoCache(id, assetName); + var keyGroup = this.GetFromCache(id, assetName); + if (keyGroup != null) keyGroup.AddRef(); + } + + Debug.Log("【載入】 => 當前<< KeyResource >>快取數量 : " + this.Count); + + return asset; + } + + /// + /// [計數管理] 【KeyResource】資源加載並且Clone, 指定Parent, Scale + /// + /// + /// + /// + /// + /// + public async UniTask LoadWithClone(int id, string assetName, Transform parent, Vector3? scale = null, Progression progression = null) + { + GameObject assetGo = null, instGo = null; + + assetGo = await CacheResource.GetInstance().Load(assetName, progression); + + if (assetGo != null) + { + this.AddIntoCache(id, assetName); + var keyGroup = this.GetFromCache(id, assetName); + if (keyGroup != null) keyGroup.AddRef(); + instGo = GameObject.Instantiate(assetGo, parent); + Vector3 localScale = (scale == null) ? instGo.transform.localScale : (Vector3)scale; + instGo.transform.localScale = localScale; + } + + Debug.Log("【載入 + Clone】 => 當前<< KeyResource >>快取數量 : " + this.Count); + + return instGo; + } + + /// + /// [計數管理] 【KeyResource】資源加載並且Clone, 指定Position, Quternion, Parent, Scale + /// + /// + /// + /// + /// + /// + /// + /// + public async UniTask LoadWithClone(int id, string assetName, Vector3 position, Quaternion rotation, Transform parent, Vector3? scale = null, Progression progression = null) + { + GameObject assetGo = null, instGo = null; + + assetGo = await CacheResource.GetInstance().Load(assetName, progression); + + if (assetGo != null) + { + this.AddIntoCache(id, assetName); + var keyGroup = this.GetFromCache(id, assetName); + if (keyGroup != null) keyGroup.AddRef(); + instGo = GameObject.Instantiate(assetGo, parent); + instGo.transform.localPosition = position; + instGo.transform.localRotation = rotation; + Vector3 localScale = (scale == null) ? instGo.transform.localScale : (Vector3)scale; + instGo.transform.localScale = localScale; + } + + Debug.Log("【載入 + Clone】 => 當前<< KeyResource >>快取數量 : " + this.Count); + + return instGo; + } + + /// + /// [計數管理] 【釋放】索引Key快取, 並且釋放資源快取 + /// + /// + /// + public override void ReleaseFromCache(int id, string assetName) + { + var keyGroup = this.GetFromCache(id, assetName); + if (keyGroup != null) + { + keyGroup.DelRef(); + + // 使用引用計數釋放 + if (keyGroup.refCount <= 0) this.DelFromCache(id, keyGroup.name); + CacheResource.GetInstance().ReleaseFromCache(keyGroup.name); + } + + Debug.Log("【單個釋放】 => 當前<< KeyResource >>快取數量 : " + this.Count); + } + + /// + /// [依照計數次數釋放] 【釋放】全部索引Key快取, 並且釋放資源快取 + /// + public override void ReleaseCache(int id) + { + if (this._keyCacher.Count > 0) + { + foreach (var keyGroup in this._keyCacher.ToArray()) + { + if (keyGroup.id != id) continue; + + if (keyGroup.refCount <= 0) + { + CacheResource.GetInstance().ReleaseFromCache(keyGroup.name); + } + else + { + // 依照計數次數釋放 + for (int i = 0; i < keyGroup.refCount; i++) + { + CacheResource.GetInstance().ReleaseFromCache(keyGroup.name); + } + } + + // 完成後, 直接刪除快取 + this.DelFromCache(keyGroup.id, keyGroup.name); + } + } + + Debug.Log("【全部釋放】 => 當前<< KeyResource >>快取數量 : " + this.Count); + } +} diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs.meta b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs.meta new file mode 100644 index 00000000..9ab386b1 --- /dev/null +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/KeyCacher/KeyResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39d14d72b330a334a85cf2f40143953e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CHANGELOG.md b/Assets/OxGFrame/CHANGELOG.md new file mode 100644 index 00000000..c794001f --- /dev/null +++ b/Assets/OxGFrame/CHANGELOG.md @@ -0,0 +1,4 @@ +# CHANGELOG + +## [1.0.0] - 2022-07-10 +- Initial submission for package distribution. diff --git a/Assets/OxGFrame/CHANGELOG.md.meta b/Assets/OxGFrame/CHANGELOG.md.meta new file mode 100644 index 00000000..47373f54 --- /dev/null +++ b/Assets/OxGFrame/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: efb3694c774742344848196eb190a246 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame.meta b/Assets/OxGFrame/CoreFrame.meta new file mode 100644 index 00000000..533f8844 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5153475f9c161540add91daee187785 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example.meta b/Assets/OxGFrame/CoreFrame/Example.meta new file mode 100644 index 00000000..49ddc9ec --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74d231d74b30f4f408c0ac5dc7a0a3a5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo.meta new file mode 100644 index 00000000..76a308e2 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f19721237511c74e91106f1ced53101 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo.meta new file mode 100644 index 00000000..047d08d3 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a868eea0d53319841bd7b2e56959e511 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity new file mode 100644 index 00000000..7d4b388e --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity @@ -0,0 +1,961 @@ +%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: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, 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: 0 + 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 &285539154 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 285539155} + - component: {fileID: 285539158} + - component: {fileID: 285539157} + - component: {fileID: 285539156} + m_Layer: 5 + m_Name: Button (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &285539155 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 285539154} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 451014374} + m_Father: {fileID: 1978569437} + 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: 250, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &285539156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 285539154} + 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: 285539157} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1888711648} + m_TargetAssemblyTypeName: PrefabberDemo, Assembly-CSharp + m_MethodName: LoadDemoPref1 + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &285539157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 285539154} + 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 &285539158 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 285539154} + m_CullTransparentMesh: 1 +--- !u!1 &451014373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451014374} + - component: {fileID: 451014376} + - component: {fileID: 451014375} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &451014374 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451014373} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 285539155} + 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 &451014375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451014373} + 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.19607843, g: 0.19607843, b: 0.19607843, 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: DemoEntity_1 +--- !u!222 &451014376 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451014373} + m_CullTransparentMesh: 1 +--- !u!1 &1005025566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1005025569} + - component: {fileID: 1005025568} + - component: {fileID: 1005025567} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1005025567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005025566} + 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 &1005025568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005025566} + 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!4 &1005025569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005025566} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1073424564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073424567} + - component: {fileID: 1073424566} + - component: {fileID: 1073424565} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1073424565 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073424564} + m_Enabled: 1 +--- !u!20 &1073424566 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073424564} + 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: 0.3 + far clip plane: 1000 + 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 &1073424567 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073424564} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1097121099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1097121100} + - component: {fileID: 1097121102} + - component: {fileID: 1097121101} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1097121100 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097121099} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1360165803} + 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 &1097121101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097121099} + 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.19607843, g: 0.19607843, b: 0.19607843, 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: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: DemoEntity_2 +--- !u!222 &1097121102 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1097121099} + m_CullTransparentMesh: 1 +--- !u!1 &1247589580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1247589581} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1247589581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247589580} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1360165802 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1360165803} + - component: {fileID: 1360165806} + - component: {fileID: 1360165805} + - component: {fileID: 1360165804} + m_Layer: 5 + m_Name: Button (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1360165803 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1360165802} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1097121100} + m_Father: {fileID: 1978569437} + 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: 250, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1360165804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1360165802} + 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: 1360165805} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1888711648} + m_TargetAssemblyTypeName: PrefabberDemo, Assembly-CSharp + m_MethodName: LoadDemoPref2 + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1360165805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1360165802} + 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 &1360165806 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1360165802} + m_CullTransparentMesh: 1 +--- !u!1 &1888711647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1888711649} + - component: {fileID: 1888711648} + m_Layer: 0 + m_Name: EntityFrameDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1888711648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888711647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f45fa861aeb395343b092eddd0e7afc9, type: 3} + m_Name: + m_EditorClassIdentifier: + container: {fileID: 1247589581} +--- !u!4 &1888711649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888711647} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1890204276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1890204280} + - component: {fileID: 1890204279} + - component: {fileID: 1890204278} + - component: {fileID: 1890204277} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1890204277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890204276} + 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 &1890204278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890204276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1890204279 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890204276} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1890204280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890204276} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1978569437} + m_Father: {fileID: 0} + 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: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1978569436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1978569437} + - component: {fileID: 1978569439} + - component: {fileID: 1978569438} + m_Layer: 5 + m_Name: group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1978569437 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978569436} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 285539155} + - {fileID: 1360165803} + m_Father: {fileID: 1890204280} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1978569438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978569436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1978569439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978569436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity.meta new file mode 100644 index 00000000..2196cb88 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/EntityFrameDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 91b70a6a030688d43947f3f1ccbbacfd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts.meta new file mode 100644 index 00000000..e6ebdcdd --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3b9bd1686f32d64e81c75502c920f21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs new file mode 100644 index 00000000..3d4ad96f --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs @@ -0,0 +1,52 @@ +using CoreFrame.EntityFrame; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DemoEntity1 : EntityBase +{ + public override void BeginInit() + { + Debug.Log($"InitThis: {this.gameObject.name}"); + } + + protected override void InitOnceComponents() + { + Debug.Log($"InitOnceComponents: {this.gameObject.name}"); + Debug.Log($"Found: {this.gameObject.name} => {this.collector.GetNode("B1").name}"); + Debug.Log($"Found: {this.gameObject.name} => {this.collector.GetNode("B2").name}"); + } + + protected override void InitOnceEvents() + { + Debug.Log($"InitOnceEvents: {this.gameObject.name}"); + } + + protected override void OnShow(object obj) + { + Debug.Log($"OnShow: {this.gameObject.name}"); + } + + protected override void OnClose() + { + Debug.Log($"OnClose: {this.gameObject.name}"); + } + + public override void OnRelease() + { + /* + * OnDestroy + */ + } + + protected override void OnUpdate(float dt) + { + /* + * Update + */ + } + public void MyMethod() + { + Debug.Log($"MyMethod: {this.gameObject.name}"); + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs.meta new file mode 100644 index 00000000..c0edd31f --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14a56ceaecd65a141b537dd694f12885 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs new file mode 100644 index 00000000..53f6eed3 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs @@ -0,0 +1,52 @@ +using CoreFrame.EntityFrame; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DemoEntity2 : EntityBase +{ + public override void BeginInit() + { + Debug.Log($"InitThis: {this.gameObject.name}"); + } + + protected override void InitOnceComponents() + { + Debug.Log($"InitOnceComponents: {this.gameObject.name}"); + Debug.Log($"Found: {this.gameObject.name} => {this.collector.GetNode("B1").name}"); + Debug.Log($"Found: {this.gameObject.name} => {this.collector.GetNode("B2").name}"); + } + + protected override void InitOnceEvents() + { + Debug.Log($"InitOnceEvents: {this.gameObject.name}"); + } + + protected override void OnShow(object obj) + { + Debug.Log($"OnShow: {this.gameObject.name}"); + } + + protected override void OnClose() + { + Debug.Log($"OnClose: {this.gameObject.name}"); + } + + public override void OnRelease() + { + /* + * OnDestroy + */ + } + + protected override void OnUpdate(float dt) + { + /* + * Update + */ + } + public void MyMethod() + { + Debug.Log($"MyMethod: {this.gameObject.name}"); + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs.meta new file mode 100644 index 00000000..cf241c88 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/DemoEntity2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8eab09c4e9c40c4f83660a4b158a58d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs new file mode 100644 index 00000000..90399b21 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs @@ -0,0 +1,21 @@ +using CoreFrame.EntityFrame; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EntityFrameDemo : MonoBehaviour +{ + public Transform container; + + public async void LoadDemoPref1() + { + var pref = await EntityManager.GetInstance().LoadWithClone("Example/Entity/DemoEntity1"); + if (pref != null) pref.MyMethod(); + } + + public async void LoadDemoPref2() + { + var pref = await EntityManager.GetInstance().LoadWithClone("Example/Entity/DemoEntity2", this.container); + if (pref != null) pref.MyMethod(); + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs.meta new file mode 100644 index 00000000..b9441617 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/EntityFrameDemo/Scripts/EntityFrameDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f45fa861aeb395343b092eddd0e7afc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo.meta new file mode 100644 index 00000000..c8acfb5a --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a157375f6eadcef4cae0c696575cb26f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity new file mode 100644 index 00000000..55a3f1e9 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity @@ -0,0 +1,4830 @@ +%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: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, 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: 0 + 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: 564130922} +--- !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!20 &155755744 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155755746} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.4811321, g: 0.4811321, b: 0.4811321, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 2147483647 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &155755745 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155755746} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &155755746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 155755745} + - component: {fileID: 155755744} + - component: {fileID: 155755747} + - component: {fileID: 155755748} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &155755747 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155755746} + m_Enabled: 1 +--- !u!114 &155755748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155755746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!1 &182048306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 182048307} + - component: {fileID: 182048309} + - component: {fileID: 182048308} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &182048307 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182048306} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1118296262} + 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 &182048308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182048306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Hide All +--- !u!222 &182048309 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182048306} + m_CullTransparentMesh: 0 +--- !u!1 &261037021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 261037022} + - component: {fileID: 261037025} + - component: {fileID: 261037024} + - component: {fileID: 261037023} + m_Layer: 5 + m_Name: Btn_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &261037022 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261037021} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 453122746} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &261037023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261037021} + 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: 261037024} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: PreloadDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &261037024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261037021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &261037025 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261037021} + m_CullTransparentMesh: 0 +--- !u!1 &349156241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 349156242} + - component: {fileID: 349156245} + - component: {fileID: 349156244} + - component: {fileID: 349156243} + m_Layer: 5 + m_Name: Btn_05 (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &349156242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349156241} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 953130855} + m_Father: {fileID: 669221197} + m_RootOrder: 15 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &349156243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349156241} + 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: 349156244} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseAllWithDestroy + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &349156244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349156241} + 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: 0, b: 0.19373989, 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 &349156245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349156241} + m_CullTransparentMesh: 0 +--- !u!1 &354707998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 354707999} + - component: {fileID: 354708002} + - component: {fileID: 354708001} + - component: {fileID: 354708000} + m_Layer: 5 + m_Name: Btn_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &354707999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354707998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1478276156} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &354708000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354707998} + 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: 354708001} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: PreloadDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &354708001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354707998} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &354708002 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354707998} + m_CullTransparentMesh: 0 +--- !u!1 &355562318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 355562319} + - component: {fileID: 355562321} + - component: {fileID: 355562320} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &355562319 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 355562318} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1510584434} + 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 &355562320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 355562318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Hide DemoSC +--- !u!222 &355562321 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 355562318} + m_CullTransparentMesh: 0 +--- !u!1 &385977925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 385977926} + - component: {fileID: 385977929} + - component: {fileID: 385977928} + - component: {fileID: 385977927} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &385977926 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385977925} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 944075903} + - {fileID: 1358559239} + - {fileID: 748739898} + m_Father: {fileID: 1494563455} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 810} + m_SizeDelta: {x: 800, y: 700} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &385977927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385977925} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 669221197} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 944075903} + m_HorizontalScrollbar: {fileID: 1358559240} + m_VerticalScrollbar: {fileID: 748739899} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &385977928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385977925} + 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.7688679, g: 0.9917912, b: 1, a: 0.392} + 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: 10907, 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 &385977929 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385977925} + m_CullTransparentMesh: 1 +--- !u!1 &406454661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 406454662} + - component: {fileID: 406454665} + - component: {fileID: 406454664} + - component: {fileID: 406454663} + m_Layer: 5 + m_Name: Btn_05 (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &406454662 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406454661} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 477396057} + m_Father: {fileID: 669221197} + m_RootOrder: 14 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &406454663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406454661} + 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: 406454664} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseAll + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &406454664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406454661} + 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: 0, b: 0.19373989, 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 &406454665 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406454661} + m_CullTransparentMesh: 0 +--- !u!1 &452834932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 452834933} + - component: {fileID: 452834936} + - component: {fileID: 452834935} + - component: {fileID: 452834934} + m_Layer: 5 + m_Name: Btn_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &452834933 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452834932} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 665290606} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &452834934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452834932} + 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: 452834935} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: ShowDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &452834935 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452834932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &452834936 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452834932} + m_CullTransparentMesh: 0 +--- !u!1 &453122745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453122746} + - component: {fileID: 453122748} + - component: {fileID: 453122747} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &453122746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453122745} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 261037022} + 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 &453122747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453122745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Preload DemoSC +--- !u!222 &453122748 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453122745} + m_CullTransparentMesh: 0 +--- !u!1 &477396056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 477396057} + - component: {fileID: 477396059} + - component: {fileID: 477396058} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &477396057 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477396056} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 406454662} + 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 &477396058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477396056} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close All +--- !u!222 &477396059 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477396056} + m_CullTransparentMesh: 0 +--- !u!850595691 &564130922 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 +--- !u!1 &592920169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 592920170} + - component: {fileID: 592920172} + - component: {fileID: 592920171} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &592920170 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 592920169} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2089179623} + 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 &592920171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 592920169} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close DemoSC with Destroy +--- !u!222 &592920172 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 592920169} + m_CullTransparentMesh: 0 +--- !u!1 &665290605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 665290606} + - component: {fileID: 665290608} + - component: {fileID: 665290607} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &665290606 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665290605} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 452834933} + 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 &665290607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665290605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Show DemoSC +--- !u!222 &665290608 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665290605} + m_CullTransparentMesh: 0 +--- !u!1 &669221196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 669221197} + - component: {fileID: 669221198} + - component: {fileID: 669221199} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &669221197 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669221196} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 261037022} + - {fileID: 452834933} + - {fileID: 2116091027} + - {fileID: 1510584434} + - {fileID: 1989372078} + - {fileID: 2089179623} + - {fileID: 354707999} + - {fileID: 1495389484} + - {fileID: 1165033623} + - {fileID: 2105957952} + - {fileID: 1347338883} + - {fileID: 1925384175} + - {fileID: 1118296262} + - {fileID: 896592505} + - {fileID: 406454662} + - {fileID: 349156242} + m_Father: {fileID: 944075903} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &669221198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669221196} + 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: 20 + m_Bottom: 20 + m_ChildAlignment: 1 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &669221199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669221196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &748739897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 748739898} + - component: {fileID: 748739901} + - component: {fileID: 748739900} + - component: {fileID: 748739899} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &748739898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748739897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1133116254} + m_Father: {fileID: 385977926} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &748739899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748739897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1101530178} + m_HandleRect: {fileID: 1101530177} + m_Direction: 2 + m_Value: 1 + m_Size: 0.4913669 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &748739900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748739897} + 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: 10907, 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 &748739901 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748739897} + m_CullTransparentMesh: 1 +--- !u!1 &867653828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 867653829} + - component: {fileID: 867653831} + - component: {fileID: 867653830} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &867653829 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867653828} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1495389484} + 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 &867653830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867653828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Show DemoRS +--- !u!222 &867653831 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867653828} + m_CullTransparentMesh: 0 +--- !u!1 &896592504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 896592505} + - component: {fileID: 896592508} + - component: {fileID: 896592507} + - component: {fileID: 896592506} + m_Layer: 5 + m_Name: Btn_05 (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &896592505 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896592504} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1556777292} + m_Father: {fileID: 669221197} + m_RootOrder: 13 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &896592506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896592504} + 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: 896592507} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: ReveaAll + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &896592507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896592504} + 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: 0, b: 0.19373989, 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 &896592508 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896592504} + m_CullTransparentMesh: 0 +--- !u!1 &944075902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 944075903} + - component: {fileID: 944075906} + - component: {fileID: 944075905} + - component: {fileID: 944075904} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &944075903 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 944075902} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 669221197} + m_Father: {fileID: 385977926} + 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: 1} +--- !u!114 &944075904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 944075902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &944075905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 944075902} + 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: 10917, 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 &944075906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 944075902} + m_CullTransparentMesh: 1 +--- !u!1 &953130854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953130855} + - component: {fileID: 953130857} + - component: {fileID: 953130856} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &953130855 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953130854} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 349156242} + 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 &953130856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953130854} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close All with Destroy +--- !u!222 &953130857 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953130854} + m_CullTransparentMesh: 0 +--- !u!1 &969860628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 969860630} + - component: {fileID: 969860629} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &969860629 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 969860628} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &969860630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 969860628} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0.86986816, y: 0.01271737, z: -9.984357} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1057165835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1057165836} + - component: {fileID: 1057165838} + - component: {fileID: 1057165837} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1057165836 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057165835} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2116091027} + 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 &1057165837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057165835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close DemoSC +--- !u!222 &1057165838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057165835} + m_CullTransparentMesh: 0 +--- !u!1 &1101530176 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101530177} + - component: {fileID: 1101530179} + - component: {fileID: 1101530178} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1101530177 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101530176} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1133116254} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1101530178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101530176} + 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 &1101530179 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101530176} + m_CullTransparentMesh: 1 +--- !u!1 &1118296261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1118296262} + - component: {fileID: 1118296265} + - component: {fileID: 1118296264} + - component: {fileID: 1118296263} + m_Layer: 5 + m_Name: Btn_05 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1118296262 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118296261} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 182048307} + m_Father: {fileID: 669221197} + m_RootOrder: 12 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1118296263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118296261} + 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: 1118296264} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: HideAll + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1118296264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118296261} + 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: 0, b: 0.19373989, 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 &1118296265 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118296261} + m_CullTransparentMesh: 0 +--- !u!1 &1133116253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1133116254} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1133116254 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1133116253} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1101530177} + m_Father: {fileID: 748739898} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1165033622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1165033623} + - component: {fileID: 1165033626} + - component: {fileID: 1165033625} + - component: {fileID: 1165033624} + m_Layer: 5 + m_Name: Btn_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1165033623 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165033622} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1602995939} + m_Father: {fileID: 669221197} + m_RootOrder: 8 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1165033624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165033622} + 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: 1165033625} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1165033625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165033622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &1165033626 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165033622} + m_CullTransparentMesh: 0 +--- !u!1 &1312587520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1312587521} + - component: {fileID: 1312587523} + - component: {fileID: 1312587522} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1312587521 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1312587520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1347338883} + 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 &1312587522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1312587520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Reveal DemoRS +--- !u!222 &1312587523 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1312587520} + m_CullTransparentMesh: 0 +--- !u!1 &1320044408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1320044410} + - component: {fileID: 1320044409} + m_Layer: 0 + m_Name: GSFrameDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1320044409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320044408} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1e7e61d09d8892b439788e6582e3f3dc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1320044410 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320044408} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 636.1993, y: 465.3139, z: -1.9977388} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1347338882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1347338883} + - component: {fileID: 1347338886} + - component: {fileID: 1347338885} + - component: {fileID: 1347338884} + m_Layer: 5 + m_Name: Btn_03 (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1347338883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347338882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1312587521} + m_Father: {fileID: 669221197} + m_RootOrder: 10 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1347338884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347338882} + 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: 1347338885} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: RevealDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1347338885 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347338882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &1347338886 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347338882} + m_CullTransparentMesh: 0 +--- !u!1 &1349511920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1349511921} + - component: {fileID: 1349511923} + - component: {fileID: 1349511922} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1349511921 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349511920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1989372078} + 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 &1349511922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349511920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Reveal DemoSC +--- !u!222 &1349511923 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349511920} + m_CullTransparentMesh: 0 +--- !u!1 &1353084149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1353084150} + - component: {fileID: 1353084152} + - component: {fileID: 1353084151} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1353084150 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353084149} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2105957952} + 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 &1353084151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353084149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Hide DemoRS +--- !u!222 &1353084152 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353084149} + m_CullTransparentMesh: 0 +--- !u!1 &1358559238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1358559239} + - component: {fileID: 1358559242} + - component: {fileID: 1358559241} + - component: {fileID: 1358559240} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1358559239 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559238} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1546036173} + m_Father: {fileID: 385977926} + 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: 0, y: 20} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1358559240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559238} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1571632703} + m_HandleRect: {fileID: 1571632702} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1358559241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559238} + 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: 10907, 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 &1358559242 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358559238} + m_CullTransparentMesh: 1 +--- !u!1 &1454641292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1454641293} + - component: {fileID: 1454641295} + - component: {fileID: 1454641294} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1454641293 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454641292} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1925384175} + 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 &1454641294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454641292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close DemoRS with Destroy +--- !u!222 &1454641295 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454641292} + m_CullTransparentMesh: 0 +--- !u!1 &1478276155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1478276156} + - component: {fileID: 1478276158} + - component: {fileID: 1478276157} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1478276156 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478276155} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 354707999} + 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 &1478276157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478276155} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Preload DemoRS +--- !u!222 &1478276158 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478276155} + m_CullTransparentMesh: 0 +--- !u!1 &1494563450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1494563455} + - component: {fileID: 1494563454} + - component: {fileID: 1494563453} + - component: {fileID: 1494563452} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1494563452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494563450} + 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 &1494563453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494563450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1494563454 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494563450} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1494563455 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1494563450} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 385977926} + m_Father: {fileID: 0} + 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: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1495389483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1495389484} + - component: {fileID: 1495389487} + - component: {fileID: 1495389486} + - component: {fileID: 1495389485} + m_Layer: 5 + m_Name: Btn_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1495389484 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495389483} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 867653829} + m_Father: {fileID: 669221197} + m_RootOrder: 7 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1495389485 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495389483} + 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: 1495389486} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: ShowDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1495389486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495389483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &1495389487 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495389483} + m_CullTransparentMesh: 0 +--- !u!1 &1510584433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1510584434} + - component: {fileID: 1510584437} + - component: {fileID: 1510584436} + - component: {fileID: 1510584435} + m_Layer: 5 + m_Name: Btn_03 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1510584434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510584433} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 355562319} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1510584435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510584433} + 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: 1510584436} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: HideDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1510584436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510584433} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &1510584437 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510584433} + m_CullTransparentMesh: 0 +--- !u!1 &1546036172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1546036173} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1546036173 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1546036172} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1571632702} + m_Father: {fileID: 1358559239} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1556777291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1556777292} + - component: {fileID: 1556777294} + - component: {fileID: 1556777293} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1556777292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556777291} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 896592505} + 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 &1556777293 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556777291} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Reveal All +--- !u!222 &1556777294 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556777291} + m_CullTransparentMesh: 0 +--- !u!1 &1571632701 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1571632702} + - component: {fileID: 1571632704} + - component: {fileID: 1571632703} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1571632702 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571632701} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1546036173} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1571632703 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571632701} + 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 &1571632704 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571632701} + m_CullTransparentMesh: 1 +--- !u!1 &1602995938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1602995939} + - component: {fileID: 1602995941} + - component: {fileID: 1602995940} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1602995939 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602995938} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1165033623} + 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 &1602995940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602995938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 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: Close DemoRS +--- !u!222 &1602995941 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602995938} + m_CullTransparentMesh: 0 +--- !u!1 &1925384174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1925384175} + - component: {fileID: 1925384178} + - component: {fileID: 1925384177} + - component: {fileID: 1925384176} + m_Layer: 5 + m_Name: Btn_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1925384175 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925384174} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1454641293} + m_Father: {fileID: 669221197} + m_RootOrder: 11 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1925384176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925384174} + 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: 1925384177} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseWithDestroyDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1925384177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925384174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &1925384178 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925384174} + m_CullTransparentMesh: 0 +--- !u!1 &1989372077 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989372078} + - component: {fileID: 1989372081} + - component: {fileID: 1989372080} + - component: {fileID: 1989372079} + m_Layer: 5 + m_Name: Btn_03 (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1989372078 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989372077} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1349511921} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1989372079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989372077} + 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: 1989372080} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: RevealDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1989372080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989372077} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &1989372081 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989372077} + m_CullTransparentMesh: 0 +--- !u!1 &2036953671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2036953674} + - component: {fileID: 2036953673} + - component: {fileID: 2036953672} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2036953672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036953671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 +--- !u!114 &2036953673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036953671} + 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!4 &2036953674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036953671} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2089179622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2089179623} + - component: {fileID: 2089179626} + - component: {fileID: 2089179625} + - component: {fileID: 2089179624} + m_Layer: 5 + m_Name: Btn_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2089179623 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089179622} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 592920170} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2089179624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089179622} + 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: 2089179625} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseWithDestroyDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2089179625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089179622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &2089179626 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089179622} + m_CullTransparentMesh: 0 +--- !u!1 &2105957951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2105957952} + - component: {fileID: 2105957955} + - component: {fileID: 2105957954} + - component: {fileID: 2105957953} + m_Layer: 5 + m_Name: Btn_03 (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2105957952 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105957951} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1353084150} + m_Father: {fileID: 669221197} + m_RootOrder: 9 + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2105957953 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105957951} + 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: 2105957954} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: HideDemoRS + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2105957954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105957951} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.3330034, b: 0.7264151, 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 &2105957955 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105957951} + m_CullTransparentMesh: 0 +--- !u!1 &2116091026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2116091027} + - component: {fileID: 2116091030} + - component: {fileID: 2116091029} + - component: {fileID: 2116091028} + m_Layer: 5 + m_Name: Btn_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2116091027 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2116091026} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1057165836} + m_Father: {fileID: 669221197} + 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: 430, y: 75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2116091028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2116091026} + 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: 2116091029} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1320044409} + m_TargetAssemblyTypeName: GSFrameDemo, Assembly-CSharp + m_MethodName: CloseDemoSC + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2116091029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2116091026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46226418, b: 0.11703253, 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 &2116091030 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2116091026} + m_CullTransparentMesh: 0 diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity.meta new file mode 100644 index 00000000..2ff2e233 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/GSFrameDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 935b15bfe3fa0a443ba325a61b6bb34a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts.meta new file mode 100644 index 00000000..ff4ddd03 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9acb9cb39770aa447ac698d89a9be4d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs new file mode 100644 index 00000000..9e275fec --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Cysharp.Threading.Tasks; +using CoreFrame.GSFrame; + +public class DemoRS : GSBase +{ + public override void BeginInit() + { + + } + + protected override async UniTask OpenSub() + { + /** + * Open Sub With Async + */ + } + + protected override void CloseSub() + { + /** + * Close Sub + */ + } + + protected override void OnShow(object obj) + { + Debug.Log("DemoRS OnShow"); + } + + protected override void InitOnceComponents() + { + /** + * Do Somthing Init Once In Here (For Components) + */ + } + + protected override void InitOnceEvents() + { + /** + * Do Somthing Init Once In Here (For Events) + */ + } + + protected override void OnUpdate(float dt) + { + /** + * Do Update Per FrameRate + */ + } + + public override void OnUpdateOnceAfterProtocol(int funcId = 0) + { + /** + * Do Update Once After Protocol Handle + */ + } + + protected override void OnClose() + { + + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs.meta new file mode 100644 index 00000000..0c546e2d --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoRS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 501ce9aa0828752478407f80d24b17ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs new file mode 100644 index 00000000..8aea0841 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs @@ -0,0 +1,64 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Cysharp.Threading.Tasks; +using CoreFrame.GSFrame; + +public class DemoSC : GSBase +{ + public override void BeginInit() + { + } + + protected override async UniTask OpenSub() + { + /** + * Open Sub With Async + */ + } + + protected override void CloseSub() + { + /** + * Close Sub + */ + } + + protected override void OnShow(object obj) + { + Debug.Log("DemoSC OnShow"); + } + + protected override void InitOnceComponents() + { + /** + * Do Somthing Init Once In Here (For Components) + */ + } + + protected override void InitOnceEvents() + { + /** + * Do Somthing Init Once In Here (For Events) + */ + } + + protected override void OnUpdate(float dt) + { + /** + * Do Update Per FrameRate + */ + } + + public override void OnUpdateOnceAfterProtocol(int funcId = 0) + { + /** + * Do Update Once After Protocol Handle + */ + } + + protected override void OnClose() + { + + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs.meta new file mode 100644 index 00000000..f393363c --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/DemoSC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdf282d4880532341a043c96f4a5b018 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs new file mode 100644 index 00000000..28cd6c4c --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs @@ -0,0 +1,101 @@ +using CoreFrame.GSFrame; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GSFrameDemo : MonoBehaviour +{ + public static string DemoSC = "Example/Scene/DemoSC"; + public static string DemoRS = "Example/Res/DemoRS"; + + public static int scId = 1; + public static int rsId = 2; + + #region Scene + public async void PreloadDemoSC() + { + await GSManager.GetInstance().Preload(GSFrameDemo.DemoSC); + } + + public async void ShowDemoSC() + { + await GSManager.GetInstance().Show(scId, GSFrameDemo.DemoSC); + } + + public void HideDemoSC() + { + GSManager.GetInstance().Hide(GSFrameDemo.DemoSC); + } + + public void RevealDemoSC() + { + GSManager.GetInstance().Reveal(GSFrameDemo.DemoSC); + } + + public void CloseDemoSC() + { + GSManager.GetInstance().Close(GSFrameDemo.DemoSC); + } + + public void CloseWithDestroyDemoSC() + { + GSManager.GetInstance().Close(GSFrameDemo.DemoSC, false, true); + } + #endregion + + #region Res + public async void PreloadDemoRS() + { + await GSManager.GetInstance().Preload(GSFrameDemo.DemoRS); + } + + public async void ShowDemoRS() + { + await GSManager.GetInstance().Show(rsId, GSFrameDemo.DemoRS); + } + + public void HideDemoRS() + { + GSManager.GetInstance().Hide(GSFrameDemo.DemoRS); + } + + public void RevealDemoRS() + { + GSManager.GetInstance().Reveal(GSFrameDemo.DemoRS); + } + + public void CloseDemoRS() + { + GSManager.GetInstance().Close(GSFrameDemo.DemoRS); + } + + public void CloseWithDestroyDemoRS() + { + GSManager.GetInstance().Close(GSFrameDemo.DemoRS, false, true); + } + #endregion + + public void HideAll() + { + GSManager.GetInstance().HideAll(scId); + GSManager.GetInstance().HideAll(rsId); + } + + public void ReveaAll() + { + GSManager.GetInstance().RevealAll(scId); + GSManager.GetInstance().RevealAll(rsId); + } + + public void CloseAll() + { + GSManager.GetInstance().CloseAll(scId); + GSManager.GetInstance().CloseAll(rsId); + } + + public void CloseAllWithDestroy() + { + GSManager.GetInstance().CloseAll(scId, false, true); + GSManager.GetInstance().CloseAll(rsId, false, true); + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs.meta new file mode 100644 index 00000000..4259b37c --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/GSFrameDemo/Scripts/GSFrameDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e7e61d09d8892b439788e6582e3f3dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo.meta new file mode 100644 index 00000000..c7fa51e5 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e8645e00149373c40b92abafa7594691 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts.meta new file mode 100644 index 00000000..1db79f92 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b36e88aad22e4cb4bbc25191082b0eb9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs new file mode 100644 index 00000000..4748f7fc --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using CoreFrame.UIFrame; +using Cysharp.Threading.Tasks; + +public class DemoLoadingUI : UIBase +{ + public override void BeginInit() + { + //this.uiType = new UINode(NodeType.Independent); + //this.isCloseAndDestroy = false; + } + + protected override async UniTask OpenSub() + { + /** + * Open Sub With Async + */ + } + + protected override void CloseSub() + { + /** + * Close Sub + */ + } + + protected override void InitOnceComponents() + { + /** + * Do Somthing Init Once In Here (For Components) + */ + } + + protected override void InitOnceEvents() + { + /** + * Do Somthing Init Once In Here (For Events) + */ + } + + protected override void OnShow(object obj) + { + /** + * Do Something Init With Every Showing In Here + */ + } + + protected override void OnUpdate(float dt) + { + /** + * Do Update Per FrameRate + */ + } + + protected override void ShowAnim(AnimEndCb animEndCb) + { + animEndCb(); // Must Keep, Because Parent Already Set AnimCallback + } + + protected override void HideAnim(AnimEndCb animEndCb) + { + animEndCb(); // Must Keep, Because Parent Already Set AnimCallback + } + + protected override void OnClose() + { + + } + + public override void OnRelease() + { + + } +} diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs.meta b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs.meta new file mode 100644 index 00000000..92a353f7 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoLoadingUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d859482a2c03044c8b9db7987fc52e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoPopup1UI.cs b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoPopup1UI.cs new file mode 100644 index 00000000..4cd21323 --- /dev/null +++ b/Assets/OxGFrame/CoreFrame/Example/CoreFrameDemo/UIFrameDemo/Scripts/DemoPopup1UI.cs @@ -0,0 +1,104 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using CoreFrame.UIFrame; +using Cysharp.Threading.Tasks; +using UnityEngine.UI; + +public class DemoPopup1UI : UIBase +{ + private Image myImage; + private Button oepnBtn; + private Image myImage2; + + public override void BeginInit() + { + //this.uiType = new UINode(NodeType.Popup); + //this.maskType = new MaskType(UIMaskOpacity.OpacityHigh); + //this.isCloseAndDestroy = false; + } + + protected override async UniTask OpenSub() + { + /** + * Open Sub With Async + */ + } + + protected override void CloseSub() + { + /** + * Close Sub + */ + } + + protected override void OnShow(object obj) + { + // Custom MaskEventFunc + //this.maskEventFunc = () => + //{ + + //}; + + Debug.Log(string.Format("{0} Do Something OnShow.", this.gameObject.name)); + } + + protected override void InitOnceComponents() + { + this.myImage = this.collector.GetNode("Image1")?.GetComponent(); + if (this.myImage != null) Debug.Log(string.Format("Binded GameObject: {0}", this.myImage.name)); + + this.oepnBtn = this.collector.GetNode("OpenBtn")?.GetComponent