├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── CHANGELOG.md.meta ├── Editor.meta ├── Editor ├── AndroidManifest.cs ├── AndroidManifest.cs.meta ├── Callbacks.cs ├── Callbacks.cs.meta ├── IosAppIcon.cs ├── IosAppIcon.cs.meta ├── IosPBXProject.cs ├── IosPBXProject.cs.meta ├── IosPlist.cs ├── IosPlist.cs.meta ├── Utils.meta ├── Utils │ ├── SaintsMenu.cs │ └── SaintsMenu.cs.meta ├── today.comes.saintsbuild.Editor.asmdef └── today.comes.saintsbuild.Editor.asmdef.meta ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── IPostProcessScene.cs ├── IPostProcessScene.cs.meta ├── today.comes.saintsbuild.Runtime.asmdef └── today.comes.saintsbuild.Runtime.asmdef.meta ├── Samples~ ├── Editor.meta ├── Editor │ ├── BuildAndroid.cs │ ├── BuildAndroid.cs.meta │ ├── BuildCallbacks.cs │ ├── BuildCallbacks.cs.meta │ ├── BuildIos.cs │ └── BuildIos.cs.meta ├── Example.unity ├── Example.unity.meta ├── RawResources.meta ├── RawResources │ ├── MyText.prefab │ └── MyText.prefab.meta ├── Scripts.meta └── Scripts │ ├── CleanSlider.cs │ ├── CleanSlider.cs.meta │ ├── TextContainer.cs │ └── TextContainer.cs.meta ├── package.json └── package.json.meta /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.unity diff -merge -text 4 | *.asset diff -merge -text 5 | *.prefab diff -merge -text 6 | *.meta diff -merge text 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /Library 3 | /Logs 4 | /obj 5 | /UserSettings 6 | /*.csproj 7 | /*.sln 8 | /Temp 9 | /.dist 10 | /ProjectSettings 11 | /Samples 12 | /Samples.meta 13 | *.meta linguist-generated=true 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.4 2 | 3 | 1. iOS: Rename `IosPlist.PListSetBoolean` to `IosPlist.SetBoolean` 4 | 2. Android: Rename `AndroidAppManifestBuild` to `AndroidManifest` 5 | 3. Android: Add `AndroidManifest.SetApplicationAttribute` 6 | 4. Android: Add `AndroidManifest.SetActivityWithLauncherIntentAttribute` 7 | -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 101eebc057fc4e74ac7823c7f8769095 3 | timeCreated: 1712320592 -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 195cab247b2dc51439d356e8a84a2504 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/AndroidManifest.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_ANDROID 2 | using System; 3 | using System.IO; 4 | using System.Text; 5 | using System.Xml; 6 | using UnityEngine; 7 | 8 | namespace SaintsBuild.Editor 9 | { 10 | public class AndroidManifest: IDisposable 11 | { 12 | private const string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android"; 13 | // ReSharper disable once MemberCanBePrivate.Global 14 | // ReSharper disable once FieldCanBeMadeReadOnly.Global 15 | public string path; 16 | // ReSharper disable once MemberCanBePrivate.Global 17 | // ReSharper disable once FieldCanBeMadeReadOnly.Global 18 | public XmlNamespaceManager nsMgr; 19 | // ReSharper disable once MemberCanBePrivate.Global 20 | // ReSharper disable once FieldCanBeMadeReadOnly.Global 21 | public XmlDocument androidManifestXmlDocument; 22 | // ReSharper disable once MemberCanBePrivate.Global 23 | // ReSharper disable once FieldCanBeMadeReadOnly.Global 24 | public XmlElement applicationElement; 25 | 26 | public AndroidManifest(string basePath) 27 | { 28 | path = Path.Combine(new[] { basePath, "src", "main", "AndroidManifest.xml" }); 29 | XmlDocument document = new XmlDocument(); 30 | using (XmlTextReader reader = new XmlTextReader(path)) 31 | { 32 | reader.Read(); 33 | document.Load(reader); 34 | } 35 | nsMgr = new XmlNamespaceManager(document.NameTable); 36 | nsMgr.AddNamespace("android", AndroidXmlNamespace); 37 | 38 | applicationElement = document.SelectSingleNode("/manifest/application") as XmlElement; 39 | 40 | androidManifestXmlDocument = document; 41 | } 42 | 43 | // ReSharper disable once MemberCanBePrivate.Global 44 | public void Save() 45 | { 46 | using XmlTextWriter writer = new XmlTextWriter(path, new UTF8Encoding(false)); 47 | writer.Formatting = Formatting.Indented; 48 | androidManifestXmlDocument.Save(writer); 49 | } 50 | 51 | public void Dispose() 52 | { 53 | Save(); 54 | } 55 | 56 | private XmlAttribute CreateAndroidAttribute(string key, string value) { 57 | XmlAttribute attr = androidManifestXmlDocument.CreateAttribute("android", key, AndroidXmlNamespace); 58 | attr.Value = value; 59 | return attr; 60 | } 61 | 62 | private XmlNode GetActivityWithLaunchIntent() { 63 | return androidManifestXmlDocument.SelectSingleNode("/manifest/application/activity[intent-filter/action/@android:name='android.intent.action.MAIN' and " + 64 | "intent-filter/category/@android:name='android.intent.category.LAUNCHER']", nsMgr); 65 | } 66 | 67 | public void SetApplicationTheme(string appTheme) { 68 | // applicationElement.Attributes.Append(CreateAndroidAttribute("theme", appTheme)); 69 | SetApplicationAttribute("theme", appTheme); 70 | } 71 | 72 | public void SetApplicationAttribute(string key, string value) { 73 | applicationElement.Attributes.Append(CreateAndroidAttribute(key, value)); 74 | } 75 | 76 | public void SetStartingActivityName(string activityName) { 77 | GetActivityWithLaunchIntent().Attributes!.Append(CreateAndroidAttribute("name", activityName)); 78 | } 79 | 80 | 81 | public void SetHardwareAcceleration() { 82 | GetActivityWithLaunchIntent().Attributes!.Append(CreateAndroidAttribute("hardwareAccelerated", "true")); 83 | } 84 | 85 | public void SetActivityWithLauncherIntentAttribute(string key, string value) { 86 | GetActivityWithLaunchIntent().Attributes!.Append(CreateAndroidAttribute(key, value)); 87 | } 88 | 89 | public void SetBillingPermission(int maxSdkVersion=-1) => SetPermissionAttribute("BILLING", maxSdkVersion); 90 | 91 | public void SetVibratePermission(int maxSdkVersion=-1) => SetPermissionAttribute("VIBRATE", maxSdkVersion); 92 | 93 | public void SetPermissionAttribute(string value, int maxSdkVersion=-1) 94 | { 95 | XmlNode manifest = androidManifestXmlDocument.SelectSingleNode("/manifest"); 96 | XmlElement child = androidManifestXmlDocument.CreateElement("uses-permission"); 97 | manifest!.AppendChild(child); 98 | 99 | XmlAttribute newAttribute = CreateAndroidAttribute("name", $"android.permission.{value}"); 100 | child.Attributes.Append(newAttribute); 101 | 102 | if (maxSdkVersion != -1) 103 | { 104 | XmlAttribute sdkVersionAttribute = CreateAndroidAttribute("maxSdkVersion", $"{maxSdkVersion}"); 105 | child.Attributes.Append(sdkVersionAttribute); 106 | } 107 | 108 | Debug.Log($"{value} {maxSdkVersion}"); 109 | } 110 | } 111 | } 112 | #endif 113 | -------------------------------------------------------------------------------- /Editor/AndroidManifest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2932cfa38e7e47e680882f00d6054569 3 | timeCreated: 1699178577 -------------------------------------------------------------------------------- /Editor/Callbacks.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using UnityEngine; 3 | using UnityEngine.SceneManagement; 4 | #if SAINTSBUILD_POST_PROCESS_SCENE 5 | using UnityEditor.Callbacks; 6 | #endif 7 | 8 | namespace SaintsBuild.Editor 9 | { 10 | public static class Callbacks 11 | { 12 | // add this to your Editor.YouStaticMethod and call this function 13 | #if SAINTSBUILD_POST_PROCESS_SCENE 14 | [PostProcessScene] 15 | #endif 16 | public static void OnPostProcessScene() 17 | { 18 | #if UNITY_EDITOR 19 | bool isBuilding = !Application.isPlaying; 20 | 21 | Scene scene = SceneManager.GetActiveScene(); 22 | #if SAINTSBUILD_DEBUG && SAINTSBUILD_DEBUG_CALLBACKS 23 | Debug.Log($"#PostProcessScene# checking scene {scene.name}"); 24 | #endif 25 | 26 | foreach (GameObject rootGameObject in scene.GetRootGameObjects()) 27 | { 28 | #if SAINTSBUILD_DEBUG && SAINTSBUILD_DEBUG_CALLBACKS 29 | Debug.Log($"#PostProcessScene# get GameObject {rootGameObject.name} in scene {scene.name}"); 30 | #endif 31 | if(rootGameObject) 32 | { 33 | foreach (Component transformsInChild in rootGameObject.GetComponentsInChildren(typeof(Transform), 34 | true)) 35 | { 36 | if (transformsInChild) 37 | { 38 | // ReSharper disable once SuspiciousTypeConversion.Global 39 | foreach (IPostProcessScene onSceneBuildCallback in transformsInChild 40 | .GetComponents().OfType()) 41 | { 42 | if (onSceneBuildCallback is Component component && component && component.gameObject) 43 | { 44 | #if SAINTSBUILD_DEBUG && SAINTSBUILD_DEBUG_CALLBACKS 45 | Debug.Log( 46 | $"#PostProcessScene# OnPostProcessScene from scene {scene.name}: {onSceneBuildCallback} {onSceneBuildCallback.GetType().Name}"); 47 | #endif 48 | onSceneBuildCallback.EditorOnPostProcessScene(isBuilding); 49 | } 50 | } 51 | } 52 | } 53 | } 54 | } 55 | 56 | #if SAINTSBUILD_DEBUG && SAINTSBUILD_DEBUG_CALLBACKS 57 | Debug.Log( 58 | $"#PostProcessScene# OnPostProcessScene from scene {scene.name} finished"); 59 | #endif 60 | 61 | #endif 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Editor/Callbacks.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9325a2c6d1b57994f80cfd998251a9b9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/IosAppIcon.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_IOS 2 | using System; 3 | using System.Collections.Generic; 4 | using UnityEditor; 5 | using System.IO; 6 | using UnityEditor.iOS.Xcode; 7 | using Debug = UnityEngine.Debug; 8 | 9 | 10 | public class IosAppIcon: IDisposable 11 | { 12 | private const string KIconInDir = "Unity-iPhone/Images.xcassets/AppIcon.appiconset"; 13 | private const string KContentsJsonFilePath = "Unity-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json"; 14 | 15 | public string projectPath; 16 | public readonly List contentsLines = new List(); 17 | 18 | public IosAppIcon(BuildTarget target, string path) 19 | { 20 | projectPath = PBXProject.GetPBXProjectPath(path); 21 | 22 | string contentsJsonName = Path.Combine(projectPath, KContentsJsonFilePath); 23 | 24 | contentsLines.AddRange(File.ReadAllLines (contentsJsonName)); 25 | } 26 | 27 | public void Save() 28 | { 29 | WriteAllLine(contentsLines, Path.Combine(projectPath, KContentsJsonFilePath)); 30 | } 31 | 32 | public void Dispose() 33 | { 34 | Save(); 35 | } 36 | 37 | public void SetMarketIcon1024(string iconPath) 38 | { 39 | Debug.Log($"copying icon {iconPath} -> {projectPath}"); 40 | CopyIconFile(projectPath, iconPath, "icon-1024.png"); 41 | // SetupContentsJsonFile(projectPath, "icon-1024.png"); 42 | SetupTheIcon(contentsLines, "icon-1024.png"); 43 | Debug.Log("copying icon finished"); 44 | } 45 | 46 | private static void CopyIconFile(string projDir, string iconFilePath, string newIconFileName) 47 | { 48 | string d = Path.Combine(Path.Combine (projDir, KIconInDir), newIconFileName); 49 | File.Copy(iconFilePath, d, true); 50 | } 51 | 52 | // private static void SetupContentsJsonFile(string projDir, string newIconFileName) 53 | // { 54 | // SetupTheIcon (content, newIconFileName); 55 | // // IEnumerable destLines = SetupTheIcon (lines, newIconFileName); 56 | // // 57 | // // WriteAllLine(destLines, contentsJsonName); 58 | // } 59 | 60 | private static void SetupTheIcon(IList lines, string iconFilename) 61 | { 62 | int findPos = FindThePos(lines as IReadOnlyList); 63 | if (findPos == -2) 64 | { 65 | return; 66 | } 67 | if(findPos == -1) 68 | { 69 | AddTheObject(lines, iconFilename); 70 | } else 71 | { 72 | SetTheObjetFilename(lines, findPos, iconFilename); 73 | } 74 | } 75 | 76 | private static void AddTheObject(IList lines, string iconFilename) 77 | { 78 | string t = 79 | $",{{\n\"size\" : \"1024x1024\",\n\"idiom\" : \"ios-marketing\",\n \"filename\" : \"{iconFilename}\",\n \"scale\" : \"1x\"\n }}"; 80 | // string[] dest = new string[lines.Count+1]; 81 | int findPos = lines.Count - 9; 82 | lines.Insert(findPos, t); 83 | // for (int i = 0, dI = 0; i < lines.Count; i++, dI++) { 84 | // if (i == findPos) { 85 | // dest[dI] = t; 86 | // dI++; 87 | // } 88 | // dest[ dI ] = lines[i]; 89 | // } 90 | // return dest; 91 | } 92 | 93 | private static void SetTheObjetFilename (IList lines, int findPos, string iconFilename ) 94 | { 95 | lines.Insert(findPos, $"\"filename\" : \"{iconFilename}\","); 96 | // string[] dest = new string[lines.Count+1]; 97 | // for (int i = 0, dI = 0; i < lines.Count; i++, dI++) { 98 | // if (i == findPos) { 99 | // dest[dI] = $"\"filename\" : \"{iconFilename}\","; 100 | // dI++; 101 | // } 102 | // dest[ dI ] = lines[i]; 103 | // } 104 | // return dest; 105 | } 106 | 107 | private static int FindThePos(IReadOnlyList lines) 108 | { 109 | for (int i = 0; i < lines.Count; i++) { 110 | string line = lines[i]; 111 | if (line.IndexOf("\"size\" : \"1024x1024\"", StringComparison.Ordinal) < 0) 112 | { 113 | continue; 114 | } 115 | 116 | string nx = lines[i+1]; 117 | if (nx.IndexOf("\"idiom\" : \"ios-marketing\"", StringComparison.Ordinal) < 0) 118 | { 119 | // throw new Exception("XcodeAddIcon: ERROR "); 120 | return -2; 121 | } 122 | return i+2; 123 | } 124 | return -1; 125 | } 126 | 127 | private static void WriteAllLine(IEnumerable lines, string filePath) 128 | { 129 | StreamWriter streamWriter = new StreamWriter(filePath); 130 | foreach (string line in lines) 131 | { 132 | streamWriter.Write(line); 133 | streamWriter.Write('\n'); 134 | } 135 | streamWriter.Close(); 136 | } 137 | } 138 | #endif 139 | -------------------------------------------------------------------------------- /Editor/IosAppIcon.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 570e7543d2974a3087add6364a96bd47 3 | timeCreated: 1700193063 -------------------------------------------------------------------------------- /Editor/IosPBXProject.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_IOS 2 | using System; 3 | using UnityEditor; 4 | using System.IO; 5 | using UnityEditor.iOS.Xcode; 6 | using Debug = UnityEngine.Debug; 7 | 8 | 9 | public class IosPBXProject: IDisposable 10 | { 11 | public string projectPath; 12 | public PBXProject project; 13 | public ProjectCapabilityManager manager; 14 | public string targetGuid; 15 | 16 | public IosPBXProject(BuildTarget target, string path) 17 | { 18 | // Read. 19 | Debug.Log($"ios build path: {path}"); 20 | projectPath = PBXProject.GetPBXProjectPath(path); 21 | Debug.Log($"ios projectPath: {projectPath}"); 22 | project = new PBXProject(); 23 | project.ReadFromString(File.ReadAllText(projectPath)); 24 | // string targetName = PBXProject.GetUnityTargetName(); // note, not "project." ... 25 | // string targetGUID = project.TargetGuidByName(targetName); 26 | targetGuid = project.GetUnityFrameworkTargetGuid(); 27 | 28 | manager = new ProjectCapabilityManager( 29 | projectPath, 30 | "Entitlements.entitlements", 31 | targetGuid: targetGuid 32 | ); 33 | 34 | Debug.Log($"ios projDir: {path}"); 35 | } 36 | 37 | public void Save() 38 | { 39 | manager.WriteToFile(); 40 | File.WriteAllText(projectPath, project.WriteToString()); 41 | } 42 | 43 | public void Dispose() 44 | { 45 | Save(); 46 | } 47 | 48 | public void AddFrameworkCoreHaptics(bool weak=false) => AddFramework("CoreHaptics.framework", weak); 49 | public void AddFrameworkAdServices(bool weak=false) => AddFramework("AdServices.framework", weak); 50 | public void AddFrameworkAppTrackingTransparency(bool weak=false) => AddFramework("AppTrackingTransparency.framework", weak); 51 | public void AddFrameworkAdSupport(bool weak=false) => AddFramework("AdSupport.framework", weak); 52 | public void AddFrameworkCoreTelephony(bool weak=false) => AddFramework("CoreTelephony.framework", weak); 53 | public void AddFrameworkSecurity(bool weak=false) => AddFramework("Security.framework", weak); 54 | public void AddFrameworkSystemConfiguration(bool weak=false) => AddFramework("SystemConfiguration.framework", weak); 55 | public void AddFrameworkLibCPP(bool weak=false) => AddFramework("libc++.tbd", weak); 56 | public void AddFrameworkLibZ(bool weak=false) => AddFramework("libz.tbd", weak); 57 | public void AddFramework(string name, bool weak=false) => project.AddFrameworkToProject(targetGuid, name, weak); 58 | 59 | public void AddBuildPropertyOtherLdFlags(string value="-ObjC") => AddBuildProperty("OTHER_LDFLAGS", value); 60 | public void AddBuildProperty(string name, string value) => project.AddBuildProperty(targetGuid, name, value); 61 | 62 | public void SetAllBuildPropertyBitcode(string value = "NO") 63 | { 64 | foreach (string target in new[] 65 | { 66 | project.GetUnityMainTargetGuid(), 67 | project.TargetGuidByName(PBXProject.GetUnityTestTargetName()), 68 | project.GetUnityFrameworkTargetGuid(), 69 | }) 70 | { 71 | SetBuildProperty(target, "ENABLE_BITCODE", value); 72 | } 73 | } 74 | public void SetBuildPropertyBitcode(string target, string value) 75 | { 76 | SetBuildProperty(target, "ENABLE_BITCODE", value); 77 | } 78 | public void SetBuildProperty(string guid, string name, string value) => project.SetBuildProperty(guid, name, value); 79 | 80 | public void ManagerAddInAppPurchase() => manager.AddInAppPurchase(); 81 | } 82 | #endif 83 | -------------------------------------------------------------------------------- /Editor/IosPBXProject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf445ce837814097b18aedcc1bc34aa8 3 | timeCreated: 1700192091 -------------------------------------------------------------------------------- /Editor/IosPlist.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_IOS 2 | using System; 3 | using System.Collections.Generic; 4 | using UnityEditor; 5 | using System.IO; 6 | using UnityEditor.iOS.Xcode; 7 | using Debug = UnityEngine.Debug; 8 | 9 | 10 | public class IosPlist: IDisposable 11 | { 12 | public PlistDocument plist; 13 | public string plistPath; 14 | public PlistElementDict plistElementDict; 15 | 16 | public IosPlist(BuildTarget target, string path) 17 | { 18 | plistPath = Path.Combine(path, "/Info.plist"); 19 | plist = new PlistDocument(); 20 | plist.ReadFromString(File.ReadAllText(plistPath)); 21 | plistElementDict = plist.root; 22 | } 23 | 24 | public void Save() 25 | { 26 | File.WriteAllText(plistPath, plist.WriteToString()); 27 | } 28 | 29 | public void Dispose() 30 | { 31 | Save(); 32 | } 33 | 34 | public struct UrlScheme 35 | { 36 | public string CFBundleTypeRole; 37 | public string CFBundleURLName; 38 | public string[] CFBundleURLSchemes; 39 | } 40 | 41 | public void AddUrlSchemes(IEnumerable urlSchemes) 42 | { 43 | PlistElementArray cfBundleURLTypes = plistElementDict.CreateArray("CFBundleURLTypes"); 44 | 45 | foreach (UrlScheme urlScheme in urlSchemes) 46 | { 47 | Debug.Log($"add urlScheme {urlScheme.CFBundleURLName}"); 48 | PlistElementDict urlSchemeDict = cfBundleURLTypes.AddDict(); 49 | urlSchemeDict.SetString("CFBundleTypeRole", urlScheme.CFBundleTypeRole); 50 | urlSchemeDict.SetString("CFBundleURLName", urlScheme.CFBundleURLName); 51 | PlistElementArray cfBundleURLSchemes = urlSchemeDict.CreateArray("CFBundleURLSchemes"); 52 | foreach (string urlSchemeCfBundleURLScheme in urlScheme.CFBundleURLSchemes) 53 | { 54 | cfBundleURLSchemes.AddString(urlSchemeCfBundleURLScheme); 55 | } 56 | } 57 | } 58 | 59 | public void SetITSAppUsesNonExemptEncryption(bool value=true) => plistElementDict.SetBoolean("ITSAppUsesNonExemptEncryption", value); 60 | public void SetBoolean(string name, bool value) => plistElementDict.SetBoolean(name, value); 61 | public void SetString(string name, string value) => plistElementDict.SetString(name, value); 62 | public void SetInteger(string name, int value) => plistElementDict.SetInteger(name, value); 63 | public void SetReal(string name, float value) => plistElementDict.SetReal(name, value); 64 | public void SetDate(string name, DateTime value) => plistElementDict.SetDate(name, value); 65 | } 66 | #endif 67 | -------------------------------------------------------------------------------- /Editor/IosPlist.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8d5f5895396d465e963b69c81b1442fa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/Utils.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 695bdb264d6c4e10aa11fe54f9128d24 3 | timeCreated: 1712321385 -------------------------------------------------------------------------------- /Editor/Utils/SaintsMenu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace SaintsBuild.Editor.Utils 8 | { 9 | public static class SaintsMenu 10 | { 11 | #if SAINTSBUILD_POST_PROCESS_SCENE 12 | [MenuItem("Window/Saints/Enable Scene Post Process")] 13 | public static void PostProcessScene() => RemoveCompileDefine("SAINTSBUILD_POST_PROCESS_SCENE"); 14 | #else 15 | [MenuItem("Window/Saints/Disable Scene Post Process")] 16 | public static void PostProcessScene() => AddCompileDefine("SAINTSBUILD_POST_PROCESS_SCENE"); 17 | #endif 18 | 19 | // ReSharper disable once UnusedMember.Local 20 | private static void AddCompileDefine(string newDefineCompileConstant, IEnumerable targetGroups = null) 21 | { 22 | IEnumerable targets = targetGroups ?? Enum.GetValues(typeof(BuildTargetGroup)).Cast(); 23 | 24 | foreach (BuildTargetGroup grp in targets.Where(each => each != BuildTargetGroup.Unknown)) 25 | { 26 | string defines; 27 | try 28 | { 29 | defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(grp); 30 | } 31 | catch (ArgumentException) 32 | { 33 | continue; 34 | } 35 | if (!defines.Contains(newDefineCompileConstant)) 36 | { 37 | if (defines.Length > 0) 38 | defines += ";"; 39 | 40 | defines += newDefineCompileConstant; 41 | try 42 | { 43 | PlayerSettings.SetScriptingDefineSymbolsForGroup(grp, defines); 44 | } 45 | catch (Exception e) 46 | { 47 | Debug.LogException(e); 48 | } 49 | } 50 | } 51 | } 52 | 53 | // ReSharper disable once UnusedMember.Local 54 | private static void RemoveCompileDefine(string defineCompileConstant, IEnumerable targetGroups = null) 55 | { 56 | IEnumerable targets = targetGroups ?? Enum.GetValues(typeof(BuildTargetGroup)).Cast(); 57 | 58 | foreach (BuildTargetGroup grp in targets.Where(each => each != BuildTargetGroup.Unknown)) 59 | { 60 | string defines; 61 | try 62 | { 63 | defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(grp); 64 | } 65 | catch (ArgumentException) 66 | { 67 | continue; 68 | } 69 | 70 | string result = string.Join(";", defines 71 | .Split(';') 72 | .Select(each => each.Trim()) 73 | .Where(each => each != defineCompileConstant)); 74 | 75 | // Debug.Log(result); 76 | 77 | try 78 | { 79 | PlayerSettings.SetScriptingDefineSymbolsForGroup(grp, result); 80 | } 81 | catch (Exception e) 82 | { 83 | Debug.LogException(e); 84 | } 85 | } 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /Editor/Utils/SaintsMenu.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aa70aa30a4fc4a348c4bc1d4b522d000 3 | timeCreated: 1712321392 -------------------------------------------------------------------------------- /Editor/today.comes.saintsbuild.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "today.comes.saintsbuild.Editor", 3 | "rootNamespace": "", 4 | "references": [ 5 | "GUID:cb862f9340462e843aff1ed87b152e74" 6 | ], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": true, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [], 16 | "versionDefines": [], 17 | "noEngineReferences": false 18 | } -------------------------------------------------------------------------------- /Editor/today.comes.saintsbuild.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 502e7319b8b34544a9ca1074a2c78a8b 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Tyler Temp 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 949c223d6ed29df45baf469ffcf8db12 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SaintsBuild # 2 | 3 | [![openupm](https://img.shields.io/npm/v/today.comes.saintsbuild?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/today.comes.saintsbuild/) 4 | [![openupm](https://img.shields.io/badge/dynamic/json?color=brightgreen&label=downloads&query=%24.downloads&suffix=%2Fmonth&url=https%3A%2F%2Fpackage.openupm.com%2Fdownloads%2Fpoint%2Flast-month%2Ftoday.comes.saintsbuild)](https://openupm.com/packages/today.comes.saintsbuild/) 5 | 6 | `SaintsBuild` is a Unity build (packing) tool for Unity, mainly focused on android and ios. 7 | 8 | ## Installation ## 9 | 10 | * Using [OpenUPM](https://openupm.com/packages/today.comes.saintsbuild/) 11 | 12 | ```bash 13 | openupm install today.comes.saintsbuild 14 | ``` 15 | 16 | * Using git upm: 17 | 18 | add to `Packages/manifest.json` in your project 19 | 20 | ```javascript 21 | { 22 | "dependencies": { 23 | "today.comes.saintsbuild": "https://github.com/TylerTemp/SaintsBuild.git", 24 | // your other dependencies... 25 | } 26 | } 27 | ``` 28 | 29 | * Using a `unitypackage`: 30 | 31 | Go to the [Release Page](https://github.com/TylerTemp/SaintsBuild/releases) to download a desired version of `unitypackage` and import it to your project 32 | 33 | * Using a git submodule: 34 | 35 | ```bash 36 | git submodule add https://github.com/TylerTemp/SaintsBuild.git Assets/SaintsBuild 37 | ``` 38 | 39 | ## Change Log## 40 | 41 | **1.0.4** 42 | 43 | 1. iOS: Rename `IosPlist.PListSetBoolean` to `IosPlist.SetBoolean` 44 | 2. Android: Rename `AndroidAppManifestBuild` to `AndroidManifest` 45 | 3. Android: Add `AndroidManifest.SetApplicationAttribute` 46 | 4. Android: Add `AndroidManifest.SetActivityWithLauncherIntentAttribute` 47 | 48 | See [the full change log](https://github.com/TylerTemp/SaintsBuild/blob/master/CHANGELOG.md). 49 | 50 | ## Usage ## 51 | 52 | ### Android ### 53 | 54 | ```csharp 55 | #if UNITY_ANDROID 56 | using SaintsBuild.Editor; 57 | using UnityEditor.Callbacks; 58 | 59 | namespace SaintsBuild.Samples.Editor 60 | { 61 | public static class BuildAndroid 62 | { 63 | [PostProcessBuild(1)] 64 | public static void OnPostGenerateGradleAndroidProject(string path) 65 | { 66 | using AndroidManifest androidAppManifest = new AndroidManifest(path); 67 | 68 | // required for android 12 if you have activity alias etc: 69 | androidManifest.SetActivityWithLauncherIntentAttribute("exported", "true"); 70 | 71 | androidManifest.SetApplicationTheme("dark"); 72 | 73 | androidManifest.SetStartingActivityName("CustomActivity"); 74 | 75 | androidManifest.SetHardwareAcceleration(); 76 | 77 | androidManifest.SetBillingPermission(); 78 | androidManifest.SetVibratePermission(); 79 | // other you need 80 | androidManifest.SetPermissionAttribute("WRITE_EXTERNAL_STORAGE", 18); 81 | } 82 | } 83 | } 84 | #endif 85 | ``` 86 | 87 | 88 | ### iOS ### 89 | 90 | ```csharp 91 | #if UNITY_IOS 92 | using UnityEditor; 93 | using UnityEditor.Callbacks; 94 | using UnityEditor.iOS.Xcode; 95 | 96 | namespace SaintsBuild.Samples.Editor 97 | { 98 | public static class BuildIos 99 | { 100 | [PostProcessBuild(1)] 101 | public static void OnPostProcessBuildAttr(BuildTarget target, string path) 102 | { 103 | #region IosPBXProject 104 | using (IosPBXProject iosPBXProject = new IosPBXProject(target, path)) { 105 | // AddFramework 106 | iosPBXProject.AddFrameworkCoreHaptics(); 107 | iosPBXProject.AddFrameworkAdServices(); 108 | iosPBXProject.AddFrameworkAppTrackingTransparency(); 109 | iosPBXProject.AddFrameworkAdSupport(); 110 | iosPBXProject.AddFrameworkCoreTelephony(); 111 | iosPBXProject.AddFrameworkSecurity(); 112 | iosPBXProject.AddFrameworkSystemConfiguration(); 113 | iosPBXProject.AddFrameworkLibCPP(); 114 | iosPBXProject.AddFrameworkLibZ(); 115 | iosPBXProject.AddFramework("YourFrameWorkName"); 116 | 117 | // AddBuildProperty 118 | iosPBXProject.AddBuildPropertyOtherLdFlags("-ObjC"); 119 | iosPBXProject.AddBuildProperty("yourBuildName", "params"); 120 | 121 | // AddInAppPurchase 122 | iosPBXProject.ManagerAddInAppPurchase(); 123 | // use iosBuild.manager to add more you need 124 | 125 | // BITCODE 126 | // all target 127 | iosPBXProject.SetAllBuildPropertyBitcode("NO"); 128 | // or if you want to set for each target 129 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.GetUnityMainTargetGuid(), "NO"); 130 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.TargetGuidByName(PBXProject.GetUnityTestTargetName()), "NO"); 131 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.GetUnityFrameworkTargetGuid(), "NO"); 132 | } 133 | #endregion 134 | 135 | #region Plist 136 | using (IosPlist iosPlist = new IosPlist(target, path)) { 137 | // urlScheme 138 | iosPlist.AddUrlSchemes(new[] 139 | { 140 | new IosPlist.UrlScheme 141 | { 142 | CFBundleURLName = "yourUrlName", 143 | CFBundleTypeRole = "Viewer", 144 | CFBundleURLSchemes = new[] {"yourSchemes"}, 145 | }, 146 | new IosPlist.UrlScheme 147 | { 148 | CFBundleURLName = "Another", 149 | CFBundleTypeRole = "Viewer", 150 | CFBundleURLSchemes = new[] {"anotherSchemes"}, 151 | }, 152 | }); 153 | 154 | // ITSAppUsesNonExemptEncryption 155 | iosPlist.SetITSAppUsesNonExemptEncryption(false); 156 | 157 | // if you manually installed the Facebook SDK (not Unity Package) 158 | iosPlist.SetString("FacebookAppID", "123412341234"); 159 | iosPlist.SetString("FacebookDisplayName", "fbAppName"); 160 | iosPlist.SetString("FacebookClientToken", "token_1234"); 161 | iosPlist.SetBoolean("FacebookAutoLogAppEventsEnabled", true); 162 | iosPlist.SetBoolean("FacebookAdvertiserIDCollectionEnabled", true); 163 | } 164 | #endregion 165 | 166 | #region IosAppIcon 167 | using (IosAppIcon iosAppIcon = new IosAppIcon(target, path)) { 168 | // set market icon as Unity will not process it 169 | iosAppIcon.SetMarketIcon1024("Assets/Game/icon-1024x1024.png"); 170 | } 171 | #endregion 172 | } 173 | } 174 | } 175 | #endif 176 | ``` 177 | 178 | ### IPostProcessScene ### 179 | 180 | Get a callback when building a scene or play a scene. Useful when you have some debug tools and want to clean it before playing or building. 181 | 182 | **Set Up** 183 | 184 | Put this in any of your editor script: 185 | 186 | ```csharp 187 | using UnityEditor.Callbacks; 188 | 189 | [PostProcessScene] 190 | public static void OnPostProcessScene() 191 | { 192 | Debug.Log("call SaintsBuild OnPostProcessScene"); 193 | SaintsBuild.Editor.Callbacks.OnPostProcessScene(); 194 | } 195 | ``` 196 | 197 | **Usage** 198 | 199 | Clean Up: 200 | 201 | ```csharp 202 | public class CleanSlider: MonoBehaviour, IPostProcessScene 203 | { 204 | public Slider slider; 205 | 206 | #if UNITY_EDITOR // don't forget this 207 | public void EditorOnPostProcessScene(bool isBuilding) 208 | { 209 | slider.value = 0; 210 | } 211 | #endif 212 | } 213 | ``` 214 | 215 | Advanced Usage: 216 | 217 | ```csharp 218 | public class TextContainer : MonoBehaviour, IPostProcessScene 219 | { 220 | public GameObject prefab; 221 | public Transform container; 222 | 223 | private void Awake() 224 | { 225 | #if UNITY_EDITOR 226 | // in build, the clean process will happen before build 227 | // but in play mode, we need to call it manually 228 | CleanUpExample(); 229 | #endif 230 | 231 | // other works 232 | foreach (int index in Enumerable.Range(0, 5)) 233 | { 234 | GameObject example = Instantiate(prefab, container); 235 | example.GetComponent().text = $"Runtime Awake created {index}"; 236 | } 237 | } 238 | 239 | #if UNITY_EDITOR 240 | public void EditorOnPostProcessScene(bool isBuilding) 241 | { 242 | if (isBuilding) // in building process, Unity will call this function and apply changes to build result 243 | { 244 | CleanUpExample(); 245 | } 246 | else // in play mode, unity will call Awake first, then call this function. Changes will be revoked after exiting play mode 247 | { 248 | // deal conflict with Awake 249 | } 250 | } 251 | 252 | private void CleanUpExample() 253 | { 254 | foreach (Transform eachExample in container.Cast().ToArray()) 255 | { 256 | Debug.Log(eachExample.gameObject.name); 257 | DestroyImmediate(eachExample.gameObject); 258 | } 259 | } 260 | #endif 261 | } 262 | ``` 263 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f10c65d8976bad545a382346a7b52f78 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af3d0a1a41e257543a1a030bb99b626d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/IPostProcessScene.cs: -------------------------------------------------------------------------------- 1 | namespace SaintsBuild 2 | { 3 | public interface IPostProcessScene 4 | { 5 | #if UNITY_EDITOR 6 | void EditorOnPostProcessScene(bool isBuilding); 7 | #endif 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Runtime/IPostProcessScene.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3b93f9ed25a41c2be9f985b616ad0a4 3 | timeCreated: 1706499003 -------------------------------------------------------------------------------- /Runtime/today.comes.saintsbuild.Runtime.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "today.comes.saintsbuild.Runtime", 3 | "rootNamespace": "", 4 | "references": [ 5 | ], 6 | "includePlatforms": [], 7 | "excludePlatforms": [], 8 | "allowUnsafeCode": false, 9 | "overrideReferences": false, 10 | "precompiledReferences": [], 11 | "autoReferenced": true, 12 | "defineConstraints": [], 13 | "versionDefines": [], 14 | "noEngineReferences": false 15 | } 16 | -------------------------------------------------------------------------------- /Runtime/today.comes.saintsbuild.Runtime.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb862f9340462e843aff1ed87b152e74 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Samples~/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8d0dd722ecf54508a56f89b935b9f9f8 3 | timeCreated: 1699179128 -------------------------------------------------------------------------------- /Samples~/Editor/BuildAndroid.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_ANDROID 2 | using SaintsBuild.Editor; 3 | using UnityEditor.Callbacks; 4 | using UnityEngine; 5 | 6 | namespace SaintsBuild.Samples.Editor 7 | { 8 | public static class BuildAndroid 9 | { 10 | [PostProcessBuild(1)] 11 | public static void OnPostGenerateGradleAndroidProject(string path) 12 | { 13 | using AndroidManifest androidManifest = new AndroidManifest(path); 14 | 15 | // required for android 12 if you have activity alias etc: 16 | Debug.Log($"Add android:exported=true"); 17 | androidManifest.SetActivityWithLauncherIntentAttribute("exported", "true"); 18 | 19 | androidManifest.SetApplicationTheme("dark"); 20 | 21 | androidManifest.SetStartingActivityName("CustomActivity"); 22 | 23 | androidManifest.SetHardwareAcceleration(); 24 | 25 | androidManifest.SetBillingPermission(); 26 | androidManifest.SetVibratePermission(); 27 | // other you need 28 | androidManifest.SetPermissionAttribute("WRITE_EXTERNAL_STORAGE", 18); 29 | } 30 | } 31 | } 32 | #endif 33 | -------------------------------------------------------------------------------- /Samples~/Editor/BuildAndroid.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6aa7ec33f481494b9cc7ce2e75bd6b2d 3 | timeCreated: 1699179137 -------------------------------------------------------------------------------- /Samples~/Editor/BuildCallbacks.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor.Callbacks; 2 | using UnityEngine; 3 | 4 | namespace SaintsBuild.Samples.Editor 5 | { 6 | public static class BuildCallbacks 7 | { 8 | [PostProcessScene] 9 | public static void OnPostProcessScene() 10 | { 11 | Debug.Log("call SaintsBuild OnPostProcessScene"); 12 | SaintsBuild.Editor.Callbacks.OnPostProcessScene(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Samples~/Editor/BuildCallbacks.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d6613900fe56414b872d2207d8005200 3 | timeCreated: 1706499883 -------------------------------------------------------------------------------- /Samples~/Editor/BuildIos.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_IOS 2 | using UnityEditor; 3 | using UnityEditor.Callbacks; 4 | using UnityEditor.iOS.Xcode; 5 | 6 | namespace SaintsBuild.Samples.Editor 7 | { 8 | public static class BuildIos 9 | { 10 | [PostProcessBuild(1)] 11 | public static void OnPostProcessBuildAttr(BuildTarget target, string path) 12 | { 13 | #region IosPBXProject 14 | using (IosPBXProject iosPBXProject = new IosPBXProject(target, path)) { 15 | // AddFramework 16 | iosPBXProject.AddFrameworkCoreHaptics(); 17 | iosPBXProject.AddFrameworkAdServices(); 18 | iosPBXProject.AddFrameworkAppTrackingTransparency(); 19 | iosPBXProject.AddFrameworkAdSupport(); 20 | iosPBXProject.AddFrameworkCoreTelephony(); 21 | iosPBXProject.AddFrameworkSecurity(); 22 | iosPBXProject.AddFrameworkSystemConfiguration(); 23 | iosPBXProject.AddFrameworkLibCPP(); 24 | iosPBXProject.AddFrameworkLibZ(); 25 | iosPBXProject.AddFramework("YourFrameWorkName"); 26 | 27 | // AddBuildProperty 28 | iosPBXProject.AddBuildPropertyOtherLdFlags("-ObjC"); 29 | iosPBXProject.AddBuildProperty("yourBuildName", "params"); 30 | 31 | // AddInAppPurchase 32 | iosPBXProject.ManagerAddInAppPurchase(); 33 | // use iosBuild.manager to add more you need 34 | 35 | // BITCODE 36 | // all target 37 | iosPBXProject.SetAllBuildPropertyBitcode("NO"); 38 | // or if you want to set for each target 39 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.GetUnityMainTargetGuid(), "NO"); 40 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.TargetGuidByName(PBXProject.GetUnityTestTargetName()), "NO"); 41 | iosPBXProject.SetBuildPropertyBitcode(iosPBXProject.project.GetUnityFrameworkTargetGuid(), "NO"); 42 | } 43 | #endregion 44 | 45 | #region Plist 46 | using (IosPlist iosPlist = new IosPlist(target, path)) { 47 | // urlScheme 48 | iosPlist.AddUrlSchemes(new[] 49 | { 50 | new IosPlist.UrlScheme 51 | { 52 | CFBundleURLName = "yourUrlName", 53 | CFBundleTypeRole = "Viewer", 54 | CFBundleURLSchemes = new[] {"yourSchemes"}, 55 | }, 56 | new IosPlist.UrlScheme 57 | { 58 | CFBundleURLName = "Another", 59 | CFBundleTypeRole = "Viewer", 60 | CFBundleURLSchemes = new[] {"anotherSchemes"}, 61 | }, 62 | }); 63 | 64 | // ITSAppUsesNonExemptEncryption 65 | iosPlist.SetITSAppUsesNonExemptEncryption(false); 66 | 67 | // if you manually installed the Facebook SDK (not Unity Package) 68 | iosPlist.SetString("FacebookAppID", "123412341234"); 69 | iosPlist.SetString("FacebookDisplayName", "fbAppName"); 70 | iosPlist.SetString("FacebookClientToken", "token_1234"); 71 | iosPlist.SetBoolean("FacebookAutoLogAppEventsEnabled", true); 72 | iosPlist.SetBoolean("FacebookAdvertiserIDCollectionEnabled", true); 73 | } 74 | #endregion 75 | 76 | #region IosAppIcon 77 | using (IosAppIcon iosAppIcon = new IosAppIcon(target, path)) { 78 | // set market icon as Unity will not process it 79 | iosAppIcon.SetMarketIcon1024("Assets/Game/icon-1024x1024.png"); 80 | } 81 | #endregion 82 | } 83 | } 84 | } 85 | #endif 86 | -------------------------------------------------------------------------------- /Samples~/Editor/BuildIos.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 47f119cba64f4dbf83419f1d8a102d60 3 | timeCreated: 1699181871 -------------------------------------------------------------------------------- /Samples~/Example.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 512 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 256 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 1 83 | m_PVRDenoiserTypeDirect: 1 84 | m_PVRDenoiserTypeIndirect: 1 85 | m_PVRDenoiserTypeAO: 1 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 1 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1001 &49727276 127 | PrefabInstance: 128 | m_ObjectHideFlags: 0 129 | serializedVersion: 2 130 | m_Modification: 131 | m_TransformParent: {fileID: 1608879948} 132 | m_Modifications: 133 | - target: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 134 | propertyPath: m_Name 135 | value: MyText (3) 136 | objectReference: {fileID: 0} 137 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 138 | propertyPath: m_LocalPosition.x 139 | value: 0 140 | objectReference: {fileID: 0} 141 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 142 | propertyPath: m_LocalPosition.y 143 | value: 0 144 | objectReference: {fileID: 0} 145 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 146 | propertyPath: m_LocalPosition.z 147 | value: 0 148 | objectReference: {fileID: 0} 149 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 150 | propertyPath: m_LocalRotation.x 151 | value: -0 152 | objectReference: {fileID: 0} 153 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 154 | propertyPath: m_LocalRotation.y 155 | value: -0 156 | objectReference: {fileID: 0} 157 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 158 | propertyPath: m_LocalRotation.z 159 | value: -0 160 | objectReference: {fileID: 0} 161 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 162 | propertyPath: m_LocalRotation.w 163 | value: 1 164 | objectReference: {fileID: 0} 165 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 166 | propertyPath: m_RootOrder 167 | value: 3 168 | objectReference: {fileID: 0} 169 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 170 | propertyPath: m_LocalEulerAnglesHint.x 171 | value: 0 172 | objectReference: {fileID: 0} 173 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 174 | propertyPath: m_LocalEulerAnglesHint.y 175 | value: 0 176 | objectReference: {fileID: 0} 177 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 178 | propertyPath: m_LocalEulerAnglesHint.z 179 | value: 0 180 | objectReference: {fileID: 0} 181 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 182 | propertyPath: m_AnchoredPosition.x 183 | value: 803.42676 184 | objectReference: {fileID: 0} 185 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 186 | propertyPath: m_AnchoredPosition.y 187 | value: 0 188 | objectReference: {fileID: 0} 189 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 190 | propertyPath: m_SizeDelta.x 191 | value: 1606.8535 192 | objectReference: {fileID: 0} 193 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 194 | propertyPath: m_SizeDelta.y 195 | value: 0 196 | objectReference: {fileID: 0} 197 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 198 | propertyPath: m_AnchorMin.x 199 | value: 0 200 | objectReference: {fileID: 0} 201 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 202 | propertyPath: m_AnchorMin.y 203 | value: 0 204 | objectReference: {fileID: 0} 205 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 206 | propertyPath: m_AnchorMax.x 207 | value: 0 208 | objectReference: {fileID: 0} 209 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 210 | propertyPath: m_AnchorMax.y 211 | value: 0 212 | objectReference: {fileID: 0} 213 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 214 | propertyPath: m_Pivot.x 215 | value: 0.5 216 | objectReference: {fileID: 0} 217 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 218 | propertyPath: m_Pivot.y 219 | value: 0.5 220 | objectReference: {fileID: 0} 221 | m_RemovedComponents: [] 222 | m_SourcePrefab: {fileID: 100100000, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 223 | --- !u!224 &49727277 stripped 224 | RectTransform: 225 | m_CorrespondingSourceObject: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 226 | m_PrefabInstance: {fileID: 49727276} 227 | m_PrefabAsset: {fileID: 0} 228 | --- !u!1 &148555843 229 | GameObject: 230 | m_ObjectHideFlags: 0 231 | m_CorrespondingSourceObject: {fileID: 0} 232 | m_PrefabInstance: {fileID: 0} 233 | m_PrefabAsset: {fileID: 0} 234 | serializedVersion: 6 235 | m_Component: 236 | - component: {fileID: 148555844} 237 | - component: {fileID: 148555847} 238 | - component: {fileID: 148555846} 239 | - component: {fileID: 148555845} 240 | m_Layer: 5 241 | m_Name: Viewport 242 | m_TagString: Untagged 243 | m_Icon: {fileID: 0} 244 | m_NavMeshLayer: 0 245 | m_StaticEditorFlags: 0 246 | m_IsActive: 1 247 | --- !u!224 &148555844 248 | RectTransform: 249 | m_ObjectHideFlags: 0 250 | m_CorrespondingSourceObject: {fileID: 0} 251 | m_PrefabInstance: {fileID: 0} 252 | m_PrefabAsset: {fileID: 0} 253 | m_GameObject: {fileID: 148555843} 254 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 255 | m_LocalPosition: {x: 0, y: 0, z: 0} 256 | m_LocalScale: {x: 1, y: 1, z: 1} 257 | m_Children: 258 | - {fileID: 1608879948} 259 | m_Father: {fileID: 1040328636} 260 | m_RootOrder: 0 261 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 262 | m_AnchorMin: {x: 0, y: 0} 263 | m_AnchorMax: {x: 0, y: 0} 264 | m_AnchoredPosition: {x: 0, y: 0} 265 | m_SizeDelta: {x: 0, y: 0} 266 | m_Pivot: {x: 0, y: 1} 267 | --- !u!114 &148555845 268 | MonoBehaviour: 269 | m_ObjectHideFlags: 0 270 | m_CorrespondingSourceObject: {fileID: 0} 271 | m_PrefabInstance: {fileID: 0} 272 | m_PrefabAsset: {fileID: 0} 273 | m_GameObject: {fileID: 148555843} 274 | m_Enabled: 1 275 | m_EditorHideFlags: 0 276 | m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} 277 | m_Name: 278 | m_EditorClassIdentifier: 279 | m_ShowMaskGraphic: 0 280 | --- !u!114 &148555846 281 | MonoBehaviour: 282 | m_ObjectHideFlags: 0 283 | m_CorrespondingSourceObject: {fileID: 0} 284 | m_PrefabInstance: {fileID: 0} 285 | m_PrefabAsset: {fileID: 0} 286 | m_GameObject: {fileID: 148555843} 287 | m_Enabled: 1 288 | m_EditorHideFlags: 0 289 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 290 | m_Name: 291 | m_EditorClassIdentifier: 292 | m_Material: {fileID: 0} 293 | m_Color: {r: 1, g: 1, b: 1, a: 1} 294 | m_RaycastTarget: 1 295 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 296 | m_Maskable: 1 297 | m_OnCullStateChanged: 298 | m_PersistentCalls: 299 | m_Calls: [] 300 | m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} 301 | m_Type: 1 302 | m_PreserveAspect: 0 303 | m_FillCenter: 1 304 | m_FillMethod: 4 305 | m_FillAmount: 1 306 | m_FillClockwise: 1 307 | m_FillOrigin: 0 308 | m_UseSpriteMesh: 0 309 | m_PixelsPerUnitMultiplier: 1 310 | --- !u!222 &148555847 311 | CanvasRenderer: 312 | m_ObjectHideFlags: 0 313 | m_CorrespondingSourceObject: {fileID: 0} 314 | m_PrefabInstance: {fileID: 0} 315 | m_PrefabAsset: {fileID: 0} 316 | m_GameObject: {fileID: 148555843} 317 | m_CullTransparentMesh: 0 318 | --- !u!1 &190744707 319 | GameObject: 320 | m_ObjectHideFlags: 0 321 | m_CorrespondingSourceObject: {fileID: 0} 322 | m_PrefabInstance: {fileID: 0} 323 | m_PrefabAsset: {fileID: 0} 324 | serializedVersion: 6 325 | m_Component: 326 | - component: {fileID: 190744708} 327 | - component: {fileID: 190744709} 328 | - component: {fileID: 190744710} 329 | m_Layer: 5 330 | m_Name: Slider 331 | m_TagString: Untagged 332 | m_Icon: {fileID: 0} 333 | m_NavMeshLayer: 0 334 | m_StaticEditorFlags: 0 335 | m_IsActive: 1 336 | --- !u!224 &190744708 337 | RectTransform: 338 | m_ObjectHideFlags: 0 339 | m_CorrespondingSourceObject: {fileID: 0} 340 | m_PrefabInstance: {fileID: 0} 341 | m_PrefabAsset: {fileID: 0} 342 | m_GameObject: {fileID: 190744707} 343 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 344 | m_LocalPosition: {x: 0, y: 0, z: 0} 345 | m_LocalScale: {x: 1, y: 1, z: 1} 346 | m_Children: 347 | - {fileID: 529762473} 348 | - {fileID: 770506606} 349 | - {fileID: 1301785979} 350 | m_Father: {fileID: 1991527872} 351 | m_RootOrder: 1 352 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 353 | m_AnchorMin: {x: 0.5, y: 0.5} 354 | m_AnchorMax: {x: 0.5, y: 0.5} 355 | m_AnchoredPosition: {x: 0, y: -530} 356 | m_SizeDelta: {x: 959.0681, y: 62.056046} 357 | m_Pivot: {x: 0.5, y: 0.5} 358 | --- !u!114 &190744709 359 | MonoBehaviour: 360 | m_ObjectHideFlags: 0 361 | m_CorrespondingSourceObject: {fileID: 0} 362 | m_PrefabInstance: {fileID: 0} 363 | m_PrefabAsset: {fileID: 0} 364 | m_GameObject: {fileID: 190744707} 365 | m_Enabled: 1 366 | m_EditorHideFlags: 0 367 | m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} 368 | m_Name: 369 | m_EditorClassIdentifier: 370 | m_Navigation: 371 | m_Mode: 3 372 | m_SelectOnUp: {fileID: 0} 373 | m_SelectOnDown: {fileID: 0} 374 | m_SelectOnLeft: {fileID: 0} 375 | m_SelectOnRight: {fileID: 0} 376 | m_Transition: 1 377 | m_Colors: 378 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 379 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 380 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 381 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 382 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 383 | m_ColorMultiplier: 1 384 | m_FadeDuration: 0.1 385 | m_SpriteState: 386 | m_HighlightedSprite: {fileID: 0} 387 | m_PressedSprite: {fileID: 0} 388 | m_SelectedSprite: {fileID: 0} 389 | m_DisabledSprite: {fileID: 0} 390 | m_AnimationTriggers: 391 | m_NormalTrigger: Normal 392 | m_HighlightedTrigger: Highlighted 393 | m_PressedTrigger: Pressed 394 | m_SelectedTrigger: Selected 395 | m_DisabledTrigger: Disabled 396 | m_Interactable: 1 397 | m_TargetGraphic: {fileID: 1051750285} 398 | m_FillRect: {fileID: 1547707460} 399 | m_HandleRect: {fileID: 1051750284} 400 | m_Direction: 0 401 | m_MinValue: 0 402 | m_MaxValue: 1 403 | m_WholeNumbers: 0 404 | m_Value: 0.818 405 | m_OnValueChanged: 406 | m_PersistentCalls: 407 | m_Calls: [] 408 | --- !u!114 &190744710 409 | MonoBehaviour: 410 | m_ObjectHideFlags: 0 411 | m_CorrespondingSourceObject: {fileID: 0} 412 | m_PrefabInstance: {fileID: 0} 413 | m_PrefabAsset: {fileID: 0} 414 | m_GameObject: {fileID: 190744707} 415 | m_Enabled: 1 416 | m_EditorHideFlags: 0 417 | m_Script: {fileID: 11500000, guid: fd47721f8f434fd187ae662823448b7a, type: 3} 418 | m_Name: 419 | m_EditorClassIdentifier: 420 | slider: {fileID: 190744709} 421 | --- !u!1001 &416695001 422 | PrefabInstance: 423 | m_ObjectHideFlags: 0 424 | serializedVersion: 2 425 | m_Modification: 426 | m_TransformParent: {fileID: 1608879948} 427 | m_Modifications: 428 | - target: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 429 | propertyPath: m_Name 430 | value: MyText (1) 431 | objectReference: {fileID: 0} 432 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 433 | propertyPath: m_LocalPosition.x 434 | value: 0 435 | objectReference: {fileID: 0} 436 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 437 | propertyPath: m_LocalPosition.y 438 | value: 0 439 | objectReference: {fileID: 0} 440 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 441 | propertyPath: m_LocalPosition.z 442 | value: 0 443 | objectReference: {fileID: 0} 444 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 445 | propertyPath: m_LocalRotation.x 446 | value: -0 447 | objectReference: {fileID: 0} 448 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 449 | propertyPath: m_LocalRotation.y 450 | value: -0 451 | objectReference: {fileID: 0} 452 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 453 | propertyPath: m_LocalRotation.z 454 | value: -0 455 | objectReference: {fileID: 0} 456 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 457 | propertyPath: m_LocalRotation.w 458 | value: 1 459 | objectReference: {fileID: 0} 460 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 461 | propertyPath: m_RootOrder 462 | value: 1 463 | objectReference: {fileID: 0} 464 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 465 | propertyPath: m_LocalEulerAnglesHint.x 466 | value: 0 467 | objectReference: {fileID: 0} 468 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 469 | propertyPath: m_LocalEulerAnglesHint.y 470 | value: 0 471 | objectReference: {fileID: 0} 472 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 473 | propertyPath: m_LocalEulerAnglesHint.z 474 | value: 0 475 | objectReference: {fileID: 0} 476 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 477 | propertyPath: m_AnchoredPosition.x 478 | value: 803.42676 479 | objectReference: {fileID: 0} 480 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 481 | propertyPath: m_AnchoredPosition.y 482 | value: 0 483 | objectReference: {fileID: 0} 484 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 485 | propertyPath: m_SizeDelta.x 486 | value: 1606.8535 487 | objectReference: {fileID: 0} 488 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 489 | propertyPath: m_SizeDelta.y 490 | value: 0 491 | objectReference: {fileID: 0} 492 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 493 | propertyPath: m_AnchorMin.x 494 | value: 0 495 | objectReference: {fileID: 0} 496 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 497 | propertyPath: m_AnchorMin.y 498 | value: 0 499 | objectReference: {fileID: 0} 500 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 501 | propertyPath: m_AnchorMax.x 502 | value: 0 503 | objectReference: {fileID: 0} 504 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 505 | propertyPath: m_AnchorMax.y 506 | value: 0 507 | objectReference: {fileID: 0} 508 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 509 | propertyPath: m_Pivot.x 510 | value: 0.5 511 | objectReference: {fileID: 0} 512 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 513 | propertyPath: m_Pivot.y 514 | value: 0.5 515 | objectReference: {fileID: 0} 516 | m_RemovedComponents: [] 517 | m_SourcePrefab: {fileID: 100100000, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 518 | --- !u!224 &416695002 stripped 519 | RectTransform: 520 | m_CorrespondingSourceObject: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 521 | m_PrefabInstance: {fileID: 416695001} 522 | m_PrefabAsset: {fileID: 0} 523 | --- !u!1001 &508556155 524 | PrefabInstance: 525 | m_ObjectHideFlags: 0 526 | serializedVersion: 2 527 | m_Modification: 528 | m_TransformParent: {fileID: 1608879948} 529 | m_Modifications: 530 | - target: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 531 | propertyPath: m_Name 532 | value: MyText (4) 533 | objectReference: {fileID: 0} 534 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 535 | propertyPath: m_LocalPosition.x 536 | value: 0 537 | objectReference: {fileID: 0} 538 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 539 | propertyPath: m_LocalPosition.y 540 | value: 0 541 | objectReference: {fileID: 0} 542 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 543 | propertyPath: m_LocalPosition.z 544 | value: 0 545 | objectReference: {fileID: 0} 546 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 547 | propertyPath: m_LocalRotation.x 548 | value: -0 549 | objectReference: {fileID: 0} 550 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 551 | propertyPath: m_LocalRotation.y 552 | value: -0 553 | objectReference: {fileID: 0} 554 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 555 | propertyPath: m_LocalRotation.z 556 | value: -0 557 | objectReference: {fileID: 0} 558 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 559 | propertyPath: m_LocalRotation.w 560 | value: 1 561 | objectReference: {fileID: 0} 562 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 563 | propertyPath: m_RootOrder 564 | value: 4 565 | objectReference: {fileID: 0} 566 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 567 | propertyPath: m_LocalEulerAnglesHint.x 568 | value: 0 569 | objectReference: {fileID: 0} 570 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 571 | propertyPath: m_LocalEulerAnglesHint.y 572 | value: 0 573 | objectReference: {fileID: 0} 574 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 575 | propertyPath: m_LocalEulerAnglesHint.z 576 | value: 0 577 | objectReference: {fileID: 0} 578 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 579 | propertyPath: m_AnchoredPosition.x 580 | value: 803.42676 581 | objectReference: {fileID: 0} 582 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 583 | propertyPath: m_AnchoredPosition.y 584 | value: 0 585 | objectReference: {fileID: 0} 586 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 587 | propertyPath: m_SizeDelta.x 588 | value: 1606.8535 589 | objectReference: {fileID: 0} 590 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 591 | propertyPath: m_SizeDelta.y 592 | value: 0 593 | objectReference: {fileID: 0} 594 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 595 | propertyPath: m_AnchorMin.x 596 | value: 0 597 | objectReference: {fileID: 0} 598 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 599 | propertyPath: m_AnchorMin.y 600 | value: 0 601 | objectReference: {fileID: 0} 602 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 603 | propertyPath: m_AnchorMax.x 604 | value: 0 605 | objectReference: {fileID: 0} 606 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 607 | propertyPath: m_AnchorMax.y 608 | value: 0 609 | objectReference: {fileID: 0} 610 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 611 | propertyPath: m_Pivot.x 612 | value: 0.5 613 | objectReference: {fileID: 0} 614 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 615 | propertyPath: m_Pivot.y 616 | value: 0.5 617 | objectReference: {fileID: 0} 618 | m_RemovedComponents: [] 619 | m_SourcePrefab: {fileID: 100100000, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 620 | --- !u!224 &508556156 stripped 621 | RectTransform: 622 | m_CorrespondingSourceObject: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 623 | m_PrefabInstance: {fileID: 508556155} 624 | m_PrefabAsset: {fileID: 0} 625 | --- !u!1 &529762472 626 | GameObject: 627 | m_ObjectHideFlags: 0 628 | m_CorrespondingSourceObject: {fileID: 0} 629 | m_PrefabInstance: {fileID: 0} 630 | m_PrefabAsset: {fileID: 0} 631 | serializedVersion: 6 632 | m_Component: 633 | - component: {fileID: 529762473} 634 | - component: {fileID: 529762475} 635 | - component: {fileID: 529762474} 636 | m_Layer: 5 637 | m_Name: Background 638 | m_TagString: Untagged 639 | m_Icon: {fileID: 0} 640 | m_NavMeshLayer: 0 641 | m_StaticEditorFlags: 0 642 | m_IsActive: 1 643 | --- !u!224 &529762473 644 | RectTransform: 645 | m_ObjectHideFlags: 0 646 | m_CorrespondingSourceObject: {fileID: 0} 647 | m_PrefabInstance: {fileID: 0} 648 | m_PrefabAsset: {fileID: 0} 649 | m_GameObject: {fileID: 529762472} 650 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 651 | m_LocalPosition: {x: 0, y: 0, z: 0} 652 | m_LocalScale: {x: 1, y: 1, z: 1} 653 | m_Children: [] 654 | m_Father: {fileID: 190744708} 655 | m_RootOrder: 0 656 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 657 | m_AnchorMin: {x: 0, y: 0.25} 658 | m_AnchorMax: {x: 1, y: 0.75} 659 | m_AnchoredPosition: {x: 0, y: 0} 660 | m_SizeDelta: {x: 0, y: 0} 661 | m_Pivot: {x: 0.5, y: 0.5} 662 | --- !u!114 &529762474 663 | MonoBehaviour: 664 | m_ObjectHideFlags: 0 665 | m_CorrespondingSourceObject: {fileID: 0} 666 | m_PrefabInstance: {fileID: 0} 667 | m_PrefabAsset: {fileID: 0} 668 | m_GameObject: {fileID: 529762472} 669 | m_Enabled: 1 670 | m_EditorHideFlags: 0 671 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 672 | m_Name: 673 | m_EditorClassIdentifier: 674 | m_Material: {fileID: 0} 675 | m_Color: {r: 1, g: 1, b: 1, a: 1} 676 | m_RaycastTarget: 1 677 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 678 | m_Maskable: 1 679 | m_OnCullStateChanged: 680 | m_PersistentCalls: 681 | m_Calls: [] 682 | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} 683 | m_Type: 1 684 | m_PreserveAspect: 0 685 | m_FillCenter: 1 686 | m_FillMethod: 4 687 | m_FillAmount: 1 688 | m_FillClockwise: 1 689 | m_FillOrigin: 0 690 | m_UseSpriteMesh: 0 691 | m_PixelsPerUnitMultiplier: 1 692 | --- !u!222 &529762475 693 | CanvasRenderer: 694 | m_ObjectHideFlags: 0 695 | m_CorrespondingSourceObject: {fileID: 0} 696 | m_PrefabInstance: {fileID: 0} 697 | m_PrefabAsset: {fileID: 0} 698 | m_GameObject: {fileID: 529762472} 699 | m_CullTransparentMesh: 0 700 | --- !u!1 &770506605 701 | GameObject: 702 | m_ObjectHideFlags: 0 703 | m_CorrespondingSourceObject: {fileID: 0} 704 | m_PrefabInstance: {fileID: 0} 705 | m_PrefabAsset: {fileID: 0} 706 | serializedVersion: 6 707 | m_Component: 708 | - component: {fileID: 770506606} 709 | m_Layer: 5 710 | m_Name: Fill Area 711 | m_TagString: Untagged 712 | m_Icon: {fileID: 0} 713 | m_NavMeshLayer: 0 714 | m_StaticEditorFlags: 0 715 | m_IsActive: 1 716 | --- !u!224 &770506606 717 | RectTransform: 718 | m_ObjectHideFlags: 0 719 | m_CorrespondingSourceObject: {fileID: 0} 720 | m_PrefabInstance: {fileID: 0} 721 | m_PrefabAsset: {fileID: 0} 722 | m_GameObject: {fileID: 770506605} 723 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 724 | m_LocalPosition: {x: 0, y: 0, z: 0} 725 | m_LocalScale: {x: 1, y: 1, z: 1} 726 | m_Children: 727 | - {fileID: 1547707460} 728 | m_Father: {fileID: 190744708} 729 | m_RootOrder: 1 730 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 731 | m_AnchorMin: {x: 0, y: 0.25} 732 | m_AnchorMax: {x: 1, y: 0.75} 733 | m_AnchoredPosition: {x: -5, y: 0} 734 | m_SizeDelta: {x: -20, y: 0} 735 | m_Pivot: {x: 0.5, y: 0.5} 736 | --- !u!1 &1040328635 737 | GameObject: 738 | m_ObjectHideFlags: 0 739 | m_CorrespondingSourceObject: {fileID: 0} 740 | m_PrefabInstance: {fileID: 0} 741 | m_PrefabAsset: {fileID: 0} 742 | serializedVersion: 6 743 | m_Component: 744 | - component: {fileID: 1040328636} 745 | - component: {fileID: 1040328639} 746 | - component: {fileID: 1040328638} 747 | - component: {fileID: 1040328637} 748 | - component: {fileID: 1040328640} 749 | m_Layer: 5 750 | m_Name: Scroll View 751 | m_TagString: Untagged 752 | m_Icon: {fileID: 0} 753 | m_NavMeshLayer: 0 754 | m_StaticEditorFlags: 0 755 | m_IsActive: 1 756 | --- !u!224 &1040328636 757 | RectTransform: 758 | m_ObjectHideFlags: 0 759 | m_CorrespondingSourceObject: {fileID: 0} 760 | m_PrefabInstance: {fileID: 0} 761 | m_PrefabAsset: {fileID: 0} 762 | m_GameObject: {fileID: 1040328635} 763 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 764 | m_LocalPosition: {x: 0, y: 0, z: 0} 765 | m_LocalScale: {x: 1, y: 1, z: 1} 766 | m_Children: 767 | - {fileID: 148555844} 768 | - {fileID: 1623542749} 769 | m_Father: {fileID: 1991527872} 770 | m_RootOrder: 0 771 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 772 | m_AnchorMin: {x: 0.5, y: 0.5} 773 | m_AnchorMax: {x: 0.5, y: 0.5} 774 | m_AnchoredPosition: {x: 0, y: 0} 775 | m_SizeDelta: {x: 1623.8535, y: 653.73596} 776 | m_Pivot: {x: 0.5, y: 0.5} 777 | --- !u!114 &1040328637 778 | MonoBehaviour: 779 | m_ObjectHideFlags: 0 780 | m_CorrespondingSourceObject: {fileID: 0} 781 | m_PrefabInstance: {fileID: 0} 782 | m_PrefabAsset: {fileID: 0} 783 | m_GameObject: {fileID: 1040328635} 784 | m_Enabled: 1 785 | m_EditorHideFlags: 0 786 | m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} 787 | m_Name: 788 | m_EditorClassIdentifier: 789 | m_Content: {fileID: 1608879948} 790 | m_Horizontal: 0 791 | m_Vertical: 1 792 | m_MovementType: 1 793 | m_Elasticity: 0.1 794 | m_Inertia: 1 795 | m_DecelerationRate: 0.135 796 | m_ScrollSensitivity: 1 797 | m_Viewport: {fileID: 148555844} 798 | m_HorizontalScrollbar: {fileID: 0} 799 | m_VerticalScrollbar: {fileID: 1623542750} 800 | m_HorizontalScrollbarVisibility: 2 801 | m_VerticalScrollbarVisibility: 2 802 | m_HorizontalScrollbarSpacing: -3 803 | m_VerticalScrollbarSpacing: -3 804 | m_OnValueChanged: 805 | m_PersistentCalls: 806 | m_Calls: [] 807 | --- !u!114 &1040328638 808 | MonoBehaviour: 809 | m_ObjectHideFlags: 0 810 | m_CorrespondingSourceObject: {fileID: 0} 811 | m_PrefabInstance: {fileID: 0} 812 | m_PrefabAsset: {fileID: 0} 813 | m_GameObject: {fileID: 1040328635} 814 | m_Enabled: 1 815 | m_EditorHideFlags: 0 816 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 817 | m_Name: 818 | m_EditorClassIdentifier: 819 | m_Material: {fileID: 0} 820 | m_Color: {r: 1, g: 1, b: 1, a: 0.392} 821 | m_RaycastTarget: 1 822 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 823 | m_Maskable: 1 824 | m_OnCullStateChanged: 825 | m_PersistentCalls: 826 | m_Calls: [] 827 | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} 828 | m_Type: 1 829 | m_PreserveAspect: 0 830 | m_FillCenter: 1 831 | m_FillMethod: 4 832 | m_FillAmount: 1 833 | m_FillClockwise: 1 834 | m_FillOrigin: 0 835 | m_UseSpriteMesh: 0 836 | m_PixelsPerUnitMultiplier: 1 837 | --- !u!222 &1040328639 838 | CanvasRenderer: 839 | m_ObjectHideFlags: 0 840 | m_CorrespondingSourceObject: {fileID: 0} 841 | m_PrefabInstance: {fileID: 0} 842 | m_PrefabAsset: {fileID: 0} 843 | m_GameObject: {fileID: 1040328635} 844 | m_CullTransparentMesh: 0 845 | --- !u!114 &1040328640 846 | MonoBehaviour: 847 | m_ObjectHideFlags: 0 848 | m_CorrespondingSourceObject: {fileID: 0} 849 | m_PrefabInstance: {fileID: 0} 850 | m_PrefabAsset: {fileID: 0} 851 | m_GameObject: {fileID: 1040328635} 852 | m_Enabled: 1 853 | m_EditorHideFlags: 0 854 | m_Script: {fileID: 11500000, guid: 76c5d0908070c4645a7d1bee607e32cd, type: 3} 855 | m_Name: 856 | m_EditorClassIdentifier: 857 | prefab: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 858 | container: {fileID: 1608879948} 859 | --- !u!1 &1051750283 860 | GameObject: 861 | m_ObjectHideFlags: 0 862 | m_CorrespondingSourceObject: {fileID: 0} 863 | m_PrefabInstance: {fileID: 0} 864 | m_PrefabAsset: {fileID: 0} 865 | serializedVersion: 6 866 | m_Component: 867 | - component: {fileID: 1051750284} 868 | - component: {fileID: 1051750286} 869 | - component: {fileID: 1051750285} 870 | m_Layer: 5 871 | m_Name: Handle 872 | m_TagString: Untagged 873 | m_Icon: {fileID: 0} 874 | m_NavMeshLayer: 0 875 | m_StaticEditorFlags: 0 876 | m_IsActive: 1 877 | --- !u!224 &1051750284 878 | RectTransform: 879 | m_ObjectHideFlags: 0 880 | m_CorrespondingSourceObject: {fileID: 0} 881 | m_PrefabInstance: {fileID: 0} 882 | m_PrefabAsset: {fileID: 0} 883 | m_GameObject: {fileID: 1051750283} 884 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 885 | m_LocalPosition: {x: 0, y: 0, z: 0} 886 | m_LocalScale: {x: 1, y: 1, z: 1} 887 | m_Children: [] 888 | m_Father: {fileID: 1301785979} 889 | m_RootOrder: 0 890 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 891 | m_AnchorMin: {x: 0, y: 0} 892 | m_AnchorMax: {x: 0, y: 0} 893 | m_AnchoredPosition: {x: 0, y: 0} 894 | m_SizeDelta: {x: 20, y: 0} 895 | m_Pivot: {x: 0.5, y: 0.5} 896 | --- !u!114 &1051750285 897 | MonoBehaviour: 898 | m_ObjectHideFlags: 0 899 | m_CorrespondingSourceObject: {fileID: 0} 900 | m_PrefabInstance: {fileID: 0} 901 | m_PrefabAsset: {fileID: 0} 902 | m_GameObject: {fileID: 1051750283} 903 | m_Enabled: 1 904 | m_EditorHideFlags: 0 905 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 906 | m_Name: 907 | m_EditorClassIdentifier: 908 | m_Material: {fileID: 0} 909 | m_Color: {r: 1, g: 1, b: 1, a: 1} 910 | m_RaycastTarget: 1 911 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 912 | m_Maskable: 1 913 | m_OnCullStateChanged: 914 | m_PersistentCalls: 915 | m_Calls: [] 916 | m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} 917 | m_Type: 0 918 | m_PreserveAspect: 0 919 | m_FillCenter: 1 920 | m_FillMethod: 4 921 | m_FillAmount: 1 922 | m_FillClockwise: 1 923 | m_FillOrigin: 0 924 | m_UseSpriteMesh: 0 925 | m_PixelsPerUnitMultiplier: 1 926 | --- !u!222 &1051750286 927 | CanvasRenderer: 928 | m_ObjectHideFlags: 0 929 | m_CorrespondingSourceObject: {fileID: 0} 930 | m_PrefabInstance: {fileID: 0} 931 | m_PrefabAsset: {fileID: 0} 932 | m_GameObject: {fileID: 1051750283} 933 | m_CullTransparentMesh: 0 934 | --- !u!1 &1301785978 935 | GameObject: 936 | m_ObjectHideFlags: 0 937 | m_CorrespondingSourceObject: {fileID: 0} 938 | m_PrefabInstance: {fileID: 0} 939 | m_PrefabAsset: {fileID: 0} 940 | serializedVersion: 6 941 | m_Component: 942 | - component: {fileID: 1301785979} 943 | m_Layer: 5 944 | m_Name: Handle Slide Area 945 | m_TagString: Untagged 946 | m_Icon: {fileID: 0} 947 | m_NavMeshLayer: 0 948 | m_StaticEditorFlags: 0 949 | m_IsActive: 1 950 | --- !u!224 &1301785979 951 | RectTransform: 952 | m_ObjectHideFlags: 0 953 | m_CorrespondingSourceObject: {fileID: 0} 954 | m_PrefabInstance: {fileID: 0} 955 | m_PrefabAsset: {fileID: 0} 956 | m_GameObject: {fileID: 1301785978} 957 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 958 | m_LocalPosition: {x: 0, y: 0, z: 0} 959 | m_LocalScale: {x: 1, y: 1, z: 1} 960 | m_Children: 961 | - {fileID: 1051750284} 962 | m_Father: {fileID: 190744708} 963 | m_RootOrder: 2 964 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 965 | m_AnchorMin: {x: 0, y: 0} 966 | m_AnchorMax: {x: 1, y: 1} 967 | m_AnchoredPosition: {x: 0, y: 0} 968 | m_SizeDelta: {x: -20, y: 0} 969 | m_Pivot: {x: 0.5, y: 0.5} 970 | --- !u!1 &1547707459 971 | GameObject: 972 | m_ObjectHideFlags: 0 973 | m_CorrespondingSourceObject: {fileID: 0} 974 | m_PrefabInstance: {fileID: 0} 975 | m_PrefabAsset: {fileID: 0} 976 | serializedVersion: 6 977 | m_Component: 978 | - component: {fileID: 1547707460} 979 | - component: {fileID: 1547707462} 980 | - component: {fileID: 1547707461} 981 | m_Layer: 5 982 | m_Name: Fill 983 | m_TagString: Untagged 984 | m_Icon: {fileID: 0} 985 | m_NavMeshLayer: 0 986 | m_StaticEditorFlags: 0 987 | m_IsActive: 1 988 | --- !u!224 &1547707460 989 | RectTransform: 990 | m_ObjectHideFlags: 0 991 | m_CorrespondingSourceObject: {fileID: 0} 992 | m_PrefabInstance: {fileID: 0} 993 | m_PrefabAsset: {fileID: 0} 994 | m_GameObject: {fileID: 1547707459} 995 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 996 | m_LocalPosition: {x: 0, y: 0, z: 0} 997 | m_LocalScale: {x: 1, y: 1, z: 1} 998 | m_Children: [] 999 | m_Father: {fileID: 770506606} 1000 | m_RootOrder: 0 1001 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1002 | m_AnchorMin: {x: 0, y: 0} 1003 | m_AnchorMax: {x: 0, y: 0} 1004 | m_AnchoredPosition: {x: 0, y: 0} 1005 | m_SizeDelta: {x: 10, y: 0} 1006 | m_Pivot: {x: 0.5, y: 0.5} 1007 | --- !u!114 &1547707461 1008 | MonoBehaviour: 1009 | m_ObjectHideFlags: 0 1010 | m_CorrespondingSourceObject: {fileID: 0} 1011 | m_PrefabInstance: {fileID: 0} 1012 | m_PrefabAsset: {fileID: 0} 1013 | m_GameObject: {fileID: 1547707459} 1014 | m_Enabled: 1 1015 | m_EditorHideFlags: 0 1016 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 1017 | m_Name: 1018 | m_EditorClassIdentifier: 1019 | m_Material: {fileID: 0} 1020 | m_Color: {r: 1, g: 0.9935299, b: 0, a: 1} 1021 | m_RaycastTarget: 1 1022 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 1023 | m_Maskable: 1 1024 | m_OnCullStateChanged: 1025 | m_PersistentCalls: 1026 | m_Calls: [] 1027 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 1028 | m_Type: 1 1029 | m_PreserveAspect: 0 1030 | m_FillCenter: 1 1031 | m_FillMethod: 4 1032 | m_FillAmount: 1 1033 | m_FillClockwise: 1 1034 | m_FillOrigin: 0 1035 | m_UseSpriteMesh: 0 1036 | m_PixelsPerUnitMultiplier: 1 1037 | --- !u!222 &1547707462 1038 | CanvasRenderer: 1039 | m_ObjectHideFlags: 0 1040 | m_CorrespondingSourceObject: {fileID: 0} 1041 | m_PrefabInstance: {fileID: 0} 1042 | m_PrefabAsset: {fileID: 0} 1043 | m_GameObject: {fileID: 1547707459} 1044 | m_CullTransparentMesh: 0 1045 | --- !u!1 &1608879947 1046 | GameObject: 1047 | m_ObjectHideFlags: 0 1048 | m_CorrespondingSourceObject: {fileID: 0} 1049 | m_PrefabInstance: {fileID: 0} 1050 | m_PrefabAsset: {fileID: 0} 1051 | serializedVersion: 6 1052 | m_Component: 1053 | - component: {fileID: 1608879948} 1054 | - component: {fileID: 1608879949} 1055 | - component: {fileID: 1608879950} 1056 | m_Layer: 5 1057 | m_Name: Content 1058 | m_TagString: Untagged 1059 | m_Icon: {fileID: 0} 1060 | m_NavMeshLayer: 0 1061 | m_StaticEditorFlags: 0 1062 | m_IsActive: 1 1063 | --- !u!224 &1608879948 1064 | RectTransform: 1065 | m_ObjectHideFlags: 0 1066 | m_CorrespondingSourceObject: {fileID: 0} 1067 | m_PrefabInstance: {fileID: 0} 1068 | m_PrefabAsset: {fileID: 0} 1069 | m_GameObject: {fileID: 1608879947} 1070 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1071 | m_LocalPosition: {x: 0, y: 0, z: 0} 1072 | m_LocalScale: {x: 1, y: 1, z: 1} 1073 | m_Children: 1074 | - {fileID: 2102475816} 1075 | - {fileID: 416695002} 1076 | - {fileID: 2002334295} 1077 | - {fileID: 49727277} 1078 | - {fileID: 508556156} 1079 | m_Father: {fileID: 148555844} 1080 | m_RootOrder: 0 1081 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1082 | m_AnchorMin: {x: 0, y: 1} 1083 | m_AnchorMax: {x: 1, y: 1} 1084 | m_AnchoredPosition: {x: 0, y: 0} 1085 | m_SizeDelta: {x: 0, y: 0} 1086 | m_Pivot: {x: 0, y: 1} 1087 | --- !u!114 &1608879949 1088 | MonoBehaviour: 1089 | m_ObjectHideFlags: 0 1090 | m_CorrespondingSourceObject: {fileID: 0} 1091 | m_PrefabInstance: {fileID: 0} 1092 | m_PrefabAsset: {fileID: 0} 1093 | m_GameObject: {fileID: 1608879947} 1094 | m_Enabled: 1 1095 | m_EditorHideFlags: 0 1096 | m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} 1097 | m_Name: 1098 | m_EditorClassIdentifier: 1099 | m_Padding: 1100 | m_Left: 0 1101 | m_Right: 0 1102 | m_Top: 0 1103 | m_Bottom: 0 1104 | m_ChildAlignment: 0 1105 | m_Spacing: 0 1106 | m_ChildForceExpandWidth: 1 1107 | m_ChildForceExpandHeight: 0 1108 | m_ChildControlWidth: 1 1109 | m_ChildControlHeight: 0 1110 | m_ChildScaleWidth: 0 1111 | m_ChildScaleHeight: 1 1112 | m_ReverseArrangement: 0 1113 | --- !u!114 &1608879950 1114 | MonoBehaviour: 1115 | m_ObjectHideFlags: 0 1116 | m_CorrespondingSourceObject: {fileID: 0} 1117 | m_PrefabInstance: {fileID: 0} 1118 | m_PrefabAsset: {fileID: 0} 1119 | m_GameObject: {fileID: 1608879947} 1120 | m_Enabled: 1 1121 | m_EditorHideFlags: 0 1122 | m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} 1123 | m_Name: 1124 | m_EditorClassIdentifier: 1125 | m_HorizontalFit: 0 1126 | m_VerticalFit: 2 1127 | --- !u!1 &1623542748 1128 | GameObject: 1129 | m_ObjectHideFlags: 0 1130 | m_CorrespondingSourceObject: {fileID: 0} 1131 | m_PrefabInstance: {fileID: 0} 1132 | m_PrefabAsset: {fileID: 0} 1133 | serializedVersion: 6 1134 | m_Component: 1135 | - component: {fileID: 1623542749} 1136 | - component: {fileID: 1623542752} 1137 | - component: {fileID: 1623542751} 1138 | - component: {fileID: 1623542750} 1139 | m_Layer: 5 1140 | m_Name: Scrollbar Vertical 1141 | m_TagString: Untagged 1142 | m_Icon: {fileID: 0} 1143 | m_NavMeshLayer: 0 1144 | m_StaticEditorFlags: 0 1145 | m_IsActive: 1 1146 | --- !u!224 &1623542749 1147 | RectTransform: 1148 | m_ObjectHideFlags: 0 1149 | m_CorrespondingSourceObject: {fileID: 0} 1150 | m_PrefabInstance: {fileID: 0} 1151 | m_PrefabAsset: {fileID: 0} 1152 | m_GameObject: {fileID: 1623542748} 1153 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1154 | m_LocalPosition: {x: 0, y: 0, z: 0} 1155 | m_LocalScale: {x: 1, y: 1, z: 1} 1156 | m_Children: 1157 | - {fileID: 1722462009} 1158 | m_Father: {fileID: 1040328636} 1159 | m_RootOrder: 1 1160 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1161 | m_AnchorMin: {x: 1, y: 0} 1162 | m_AnchorMax: {x: 1, y: 1} 1163 | m_AnchoredPosition: {x: 0, y: 0} 1164 | m_SizeDelta: {x: 20, y: 0} 1165 | m_Pivot: {x: 1, y: 1} 1166 | --- !u!114 &1623542750 1167 | MonoBehaviour: 1168 | m_ObjectHideFlags: 0 1169 | m_CorrespondingSourceObject: {fileID: 0} 1170 | m_PrefabInstance: {fileID: 0} 1171 | m_PrefabAsset: {fileID: 0} 1172 | m_GameObject: {fileID: 1623542748} 1173 | m_Enabled: 1 1174 | m_EditorHideFlags: 0 1175 | m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} 1176 | m_Name: 1177 | m_EditorClassIdentifier: 1178 | m_Navigation: 1179 | m_Mode: 3 1180 | m_SelectOnUp: {fileID: 0} 1181 | m_SelectOnDown: {fileID: 0} 1182 | m_SelectOnLeft: {fileID: 0} 1183 | m_SelectOnRight: {fileID: 0} 1184 | m_Transition: 1 1185 | m_Colors: 1186 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 1187 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 1188 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 1189 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 1190 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 1191 | m_ColorMultiplier: 1 1192 | m_FadeDuration: 0.1 1193 | m_SpriteState: 1194 | m_HighlightedSprite: {fileID: 0} 1195 | m_PressedSprite: {fileID: 0} 1196 | m_SelectedSprite: {fileID: 0} 1197 | m_DisabledSprite: {fileID: 0} 1198 | m_AnimationTriggers: 1199 | m_NormalTrigger: Normal 1200 | m_HighlightedTrigger: Highlighted 1201 | m_PressedTrigger: Pressed 1202 | m_SelectedTrigger: Selected 1203 | m_DisabledTrigger: Disabled 1204 | m_Interactable: 1 1205 | m_TargetGraphic: {fileID: 1927824012} 1206 | m_HandleRect: {fileID: 1927824011} 1207 | m_Direction: 2 1208 | m_Value: 1.0000004 1209 | m_Size: 0.63346505 1210 | m_NumberOfSteps: 0 1211 | m_OnValueChanged: 1212 | m_PersistentCalls: 1213 | m_Calls: [] 1214 | --- !u!114 &1623542751 1215 | MonoBehaviour: 1216 | m_ObjectHideFlags: 0 1217 | m_CorrespondingSourceObject: {fileID: 0} 1218 | m_PrefabInstance: {fileID: 0} 1219 | m_PrefabAsset: {fileID: 0} 1220 | m_GameObject: {fileID: 1623542748} 1221 | m_Enabled: 1 1222 | m_EditorHideFlags: 0 1223 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 1224 | m_Name: 1225 | m_EditorClassIdentifier: 1226 | m_Material: {fileID: 0} 1227 | m_Color: {r: 1, g: 1, b: 1, a: 1} 1228 | m_RaycastTarget: 1 1229 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 1230 | m_Maskable: 1 1231 | m_OnCullStateChanged: 1232 | m_PersistentCalls: 1233 | m_Calls: [] 1234 | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} 1235 | m_Type: 1 1236 | m_PreserveAspect: 0 1237 | m_FillCenter: 1 1238 | m_FillMethod: 4 1239 | m_FillAmount: 1 1240 | m_FillClockwise: 1 1241 | m_FillOrigin: 0 1242 | m_UseSpriteMesh: 0 1243 | m_PixelsPerUnitMultiplier: 1 1244 | --- !u!222 &1623542752 1245 | CanvasRenderer: 1246 | m_ObjectHideFlags: 0 1247 | m_CorrespondingSourceObject: {fileID: 0} 1248 | m_PrefabInstance: {fileID: 0} 1249 | m_PrefabAsset: {fileID: 0} 1250 | m_GameObject: {fileID: 1623542748} 1251 | m_CullTransparentMesh: 0 1252 | --- !u!1 &1722462008 1253 | GameObject: 1254 | m_ObjectHideFlags: 0 1255 | m_CorrespondingSourceObject: {fileID: 0} 1256 | m_PrefabInstance: {fileID: 0} 1257 | m_PrefabAsset: {fileID: 0} 1258 | serializedVersion: 6 1259 | m_Component: 1260 | - component: {fileID: 1722462009} 1261 | m_Layer: 5 1262 | m_Name: Sliding Area 1263 | m_TagString: Untagged 1264 | m_Icon: {fileID: 0} 1265 | m_NavMeshLayer: 0 1266 | m_StaticEditorFlags: 0 1267 | m_IsActive: 1 1268 | --- !u!224 &1722462009 1269 | RectTransform: 1270 | m_ObjectHideFlags: 0 1271 | m_CorrespondingSourceObject: {fileID: 0} 1272 | m_PrefabInstance: {fileID: 0} 1273 | m_PrefabAsset: {fileID: 0} 1274 | m_GameObject: {fileID: 1722462008} 1275 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1276 | m_LocalPosition: {x: 0, y: 0, z: 0} 1277 | m_LocalScale: {x: 1, y: 1, z: 1} 1278 | m_Children: 1279 | - {fileID: 1927824011} 1280 | m_Father: {fileID: 1623542749} 1281 | m_RootOrder: 0 1282 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1283 | m_AnchorMin: {x: 0, y: 0} 1284 | m_AnchorMax: {x: 1, y: 1} 1285 | m_AnchoredPosition: {x: 0, y: 0} 1286 | m_SizeDelta: {x: -20, y: -20} 1287 | m_Pivot: {x: 0.5, y: 0.5} 1288 | --- !u!1 &1927824010 1289 | GameObject: 1290 | m_ObjectHideFlags: 0 1291 | m_CorrespondingSourceObject: {fileID: 0} 1292 | m_PrefabInstance: {fileID: 0} 1293 | m_PrefabAsset: {fileID: 0} 1294 | serializedVersion: 6 1295 | m_Component: 1296 | - component: {fileID: 1927824011} 1297 | - component: {fileID: 1927824013} 1298 | - component: {fileID: 1927824012} 1299 | m_Layer: 5 1300 | m_Name: Handle 1301 | m_TagString: Untagged 1302 | m_Icon: {fileID: 0} 1303 | m_NavMeshLayer: 0 1304 | m_StaticEditorFlags: 0 1305 | m_IsActive: 1 1306 | --- !u!224 &1927824011 1307 | RectTransform: 1308 | m_ObjectHideFlags: 0 1309 | m_CorrespondingSourceObject: {fileID: 0} 1310 | m_PrefabInstance: {fileID: 0} 1311 | m_PrefabAsset: {fileID: 0} 1312 | m_GameObject: {fileID: 1927824010} 1313 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1314 | m_LocalPosition: {x: 0, y: 0, z: 0} 1315 | m_LocalScale: {x: 1, y: 1, z: 1} 1316 | m_Children: [] 1317 | m_Father: {fileID: 1722462009} 1318 | m_RootOrder: 0 1319 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1320 | m_AnchorMin: {x: 0, y: 0} 1321 | m_AnchorMax: {x: 0, y: 0} 1322 | m_AnchoredPosition: {x: 0, y: 0} 1323 | m_SizeDelta: {x: 20, y: 20} 1324 | m_Pivot: {x: 0.5, y: 0.5} 1325 | --- !u!114 &1927824012 1326 | MonoBehaviour: 1327 | m_ObjectHideFlags: 0 1328 | m_CorrespondingSourceObject: {fileID: 0} 1329 | m_PrefabInstance: {fileID: 0} 1330 | m_PrefabAsset: {fileID: 0} 1331 | m_GameObject: {fileID: 1927824010} 1332 | m_Enabled: 1 1333 | m_EditorHideFlags: 0 1334 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 1335 | m_Name: 1336 | m_EditorClassIdentifier: 1337 | m_Material: {fileID: 0} 1338 | m_Color: {r: 1, g: 1, b: 1, a: 1} 1339 | m_RaycastTarget: 1 1340 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 1341 | m_Maskable: 1 1342 | m_OnCullStateChanged: 1343 | m_PersistentCalls: 1344 | m_Calls: [] 1345 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 1346 | m_Type: 1 1347 | m_PreserveAspect: 0 1348 | m_FillCenter: 1 1349 | m_FillMethod: 4 1350 | m_FillAmount: 1 1351 | m_FillClockwise: 1 1352 | m_FillOrigin: 0 1353 | m_UseSpriteMesh: 0 1354 | m_PixelsPerUnitMultiplier: 1 1355 | --- !u!222 &1927824013 1356 | CanvasRenderer: 1357 | m_ObjectHideFlags: 0 1358 | m_CorrespondingSourceObject: {fileID: 0} 1359 | m_PrefabInstance: {fileID: 0} 1360 | m_PrefabAsset: {fileID: 0} 1361 | m_GameObject: {fileID: 1927824010} 1362 | m_CullTransparentMesh: 0 1363 | --- !u!1 &1991527868 1364 | GameObject: 1365 | m_ObjectHideFlags: 0 1366 | m_CorrespondingSourceObject: {fileID: 0} 1367 | m_PrefabInstance: {fileID: 0} 1368 | m_PrefabAsset: {fileID: 0} 1369 | serializedVersion: 6 1370 | m_Component: 1371 | - component: {fileID: 1991527872} 1372 | - component: {fileID: 1991527871} 1373 | - component: {fileID: 1991527870} 1374 | - component: {fileID: 1991527869} 1375 | m_Layer: 5 1376 | m_Name: Canvas 1377 | m_TagString: Untagged 1378 | m_Icon: {fileID: 0} 1379 | m_NavMeshLayer: 0 1380 | m_StaticEditorFlags: 0 1381 | m_IsActive: 1 1382 | --- !u!114 &1991527869 1383 | MonoBehaviour: 1384 | m_ObjectHideFlags: 0 1385 | m_CorrespondingSourceObject: {fileID: 0} 1386 | m_PrefabInstance: {fileID: 0} 1387 | m_PrefabAsset: {fileID: 0} 1388 | m_GameObject: {fileID: 1991527868} 1389 | m_Enabled: 1 1390 | m_EditorHideFlags: 0 1391 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} 1392 | m_Name: 1393 | m_EditorClassIdentifier: 1394 | m_IgnoreReversedGraphics: 1 1395 | m_BlockingObjects: 0 1396 | m_BlockingMask: 1397 | serializedVersion: 2 1398 | m_Bits: 4294967295 1399 | --- !u!114 &1991527870 1400 | MonoBehaviour: 1401 | m_ObjectHideFlags: 0 1402 | m_CorrespondingSourceObject: {fileID: 0} 1403 | m_PrefabInstance: {fileID: 0} 1404 | m_PrefabAsset: {fileID: 0} 1405 | m_GameObject: {fileID: 1991527868} 1406 | m_Enabled: 1 1407 | m_EditorHideFlags: 0 1408 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} 1409 | m_Name: 1410 | m_EditorClassIdentifier: 1411 | m_UiScaleMode: 1 1412 | m_ReferencePixelsPerUnit: 100 1413 | m_ScaleFactor: 1 1414 | m_ReferenceResolution: {x: 1920, y: 1080} 1415 | m_ScreenMatchMode: 0 1416 | m_MatchWidthOrHeight: 0 1417 | m_PhysicalUnit: 3 1418 | m_FallbackScreenDPI: 96 1419 | m_DefaultSpriteDPI: 96 1420 | m_DynamicPixelsPerUnit: 1 1421 | --- !u!223 &1991527871 1422 | Canvas: 1423 | m_ObjectHideFlags: 0 1424 | m_CorrespondingSourceObject: {fileID: 0} 1425 | m_PrefabInstance: {fileID: 0} 1426 | m_PrefabAsset: {fileID: 0} 1427 | m_GameObject: {fileID: 1991527868} 1428 | m_Enabled: 1 1429 | serializedVersion: 3 1430 | m_RenderMode: 0 1431 | m_Camera: {fileID: 0} 1432 | m_PlaneDistance: 100 1433 | m_PixelPerfect: 0 1434 | m_ReceivesEvents: 1 1435 | m_OverrideSorting: 0 1436 | m_OverridePixelPerfect: 0 1437 | m_SortingBucketNormalizedSize: 0 1438 | m_AdditionalShaderChannelsFlag: 0 1439 | m_SortingLayerID: 0 1440 | m_SortingOrder: 0 1441 | m_TargetDisplay: 0 1442 | --- !u!224 &1991527872 1443 | RectTransform: 1444 | m_ObjectHideFlags: 0 1445 | m_CorrespondingSourceObject: {fileID: 0} 1446 | m_PrefabInstance: {fileID: 0} 1447 | m_PrefabAsset: {fileID: 0} 1448 | m_GameObject: {fileID: 1991527868} 1449 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1450 | m_LocalPosition: {x: 0, y: 0, z: 0} 1451 | m_LocalScale: {x: 0, y: 0, z: 0} 1452 | m_Children: 1453 | - {fileID: 1040328636} 1454 | - {fileID: 190744708} 1455 | m_Father: {fileID: 0} 1456 | m_RootOrder: 1 1457 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1458 | m_AnchorMin: {x: 0, y: 0} 1459 | m_AnchorMax: {x: 0, y: 0} 1460 | m_AnchoredPosition: {x: 0, y: 0} 1461 | m_SizeDelta: {x: 0, y: 0} 1462 | m_Pivot: {x: 0, y: 0} 1463 | --- !u!1001 &2002334294 1464 | PrefabInstance: 1465 | m_ObjectHideFlags: 0 1466 | serializedVersion: 2 1467 | m_Modification: 1468 | m_TransformParent: {fileID: 1608879948} 1469 | m_Modifications: 1470 | - target: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1471 | propertyPath: m_Name 1472 | value: MyText (2) 1473 | objectReference: {fileID: 0} 1474 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1475 | propertyPath: m_LocalPosition.x 1476 | value: 0 1477 | objectReference: {fileID: 0} 1478 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1479 | propertyPath: m_LocalPosition.y 1480 | value: 0 1481 | objectReference: {fileID: 0} 1482 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1483 | propertyPath: m_LocalPosition.z 1484 | value: 0 1485 | objectReference: {fileID: 0} 1486 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1487 | propertyPath: m_LocalRotation.x 1488 | value: -0 1489 | objectReference: {fileID: 0} 1490 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1491 | propertyPath: m_LocalRotation.y 1492 | value: -0 1493 | objectReference: {fileID: 0} 1494 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1495 | propertyPath: m_LocalRotation.z 1496 | value: -0 1497 | objectReference: {fileID: 0} 1498 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1499 | propertyPath: m_LocalRotation.w 1500 | value: 1 1501 | objectReference: {fileID: 0} 1502 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1503 | propertyPath: m_RootOrder 1504 | value: 2 1505 | objectReference: {fileID: 0} 1506 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1507 | propertyPath: m_LocalEulerAnglesHint.x 1508 | value: 0 1509 | objectReference: {fileID: 0} 1510 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1511 | propertyPath: m_LocalEulerAnglesHint.y 1512 | value: 0 1513 | objectReference: {fileID: 0} 1514 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1515 | propertyPath: m_LocalEulerAnglesHint.z 1516 | value: 0 1517 | objectReference: {fileID: 0} 1518 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1519 | propertyPath: m_AnchoredPosition.x 1520 | value: 803.42676 1521 | objectReference: {fileID: 0} 1522 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1523 | propertyPath: m_AnchoredPosition.y 1524 | value: 0 1525 | objectReference: {fileID: 0} 1526 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1527 | propertyPath: m_SizeDelta.x 1528 | value: 1606.8535 1529 | objectReference: {fileID: 0} 1530 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1531 | propertyPath: m_SizeDelta.y 1532 | value: 0 1533 | objectReference: {fileID: 0} 1534 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1535 | propertyPath: m_AnchorMin.x 1536 | value: 0 1537 | objectReference: {fileID: 0} 1538 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1539 | propertyPath: m_AnchorMin.y 1540 | value: 0 1541 | objectReference: {fileID: 0} 1542 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1543 | propertyPath: m_AnchorMax.x 1544 | value: 0 1545 | objectReference: {fileID: 0} 1546 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1547 | propertyPath: m_AnchorMax.y 1548 | value: 0 1549 | objectReference: {fileID: 0} 1550 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1551 | propertyPath: m_Pivot.x 1552 | value: 0.5 1553 | objectReference: {fileID: 0} 1554 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1555 | propertyPath: m_Pivot.y 1556 | value: 0.5 1557 | objectReference: {fileID: 0} 1558 | m_RemovedComponents: [] 1559 | m_SourcePrefab: {fileID: 100100000, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1560 | --- !u!224 &2002334295 stripped 1561 | RectTransform: 1562 | m_CorrespondingSourceObject: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1563 | m_PrefabInstance: {fileID: 2002334294} 1564 | m_PrefabAsset: {fileID: 0} 1565 | --- !u!1 &2094731617 1566 | GameObject: 1567 | m_ObjectHideFlags: 0 1568 | m_CorrespondingSourceObject: {fileID: 0} 1569 | m_PrefabInstance: {fileID: 0} 1570 | m_PrefabAsset: {fileID: 0} 1571 | serializedVersion: 6 1572 | m_Component: 1573 | - component: {fileID: 2094731620} 1574 | - component: {fileID: 2094731619} 1575 | - component: {fileID: 2094731618} 1576 | m_Layer: 0 1577 | m_Name: EventSystem 1578 | m_TagString: Untagged 1579 | m_Icon: {fileID: 0} 1580 | m_NavMeshLayer: 0 1581 | m_StaticEditorFlags: 0 1582 | m_IsActive: 1 1583 | --- !u!114 &2094731618 1584 | MonoBehaviour: 1585 | m_ObjectHideFlags: 0 1586 | m_CorrespondingSourceObject: {fileID: 0} 1587 | m_PrefabInstance: {fileID: 0} 1588 | m_PrefabAsset: {fileID: 0} 1589 | m_GameObject: {fileID: 2094731617} 1590 | m_Enabled: 1 1591 | m_EditorHideFlags: 0 1592 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 1593 | m_Name: 1594 | m_EditorClassIdentifier: 1595 | m_HorizontalAxis: Horizontal 1596 | m_VerticalAxis: Vertical 1597 | m_SubmitButton: Submit 1598 | m_CancelButton: Cancel 1599 | m_InputActionsPerSecond: 10 1600 | m_RepeatDelay: 0.5 1601 | m_ForceModuleActive: 0 1602 | --- !u!114 &2094731619 1603 | MonoBehaviour: 1604 | m_ObjectHideFlags: 0 1605 | m_CorrespondingSourceObject: {fileID: 0} 1606 | m_PrefabInstance: {fileID: 0} 1607 | m_PrefabAsset: {fileID: 0} 1608 | m_GameObject: {fileID: 2094731617} 1609 | m_Enabled: 1 1610 | m_EditorHideFlags: 0 1611 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 1612 | m_Name: 1613 | m_EditorClassIdentifier: 1614 | m_FirstSelected: {fileID: 0} 1615 | m_sendNavigationEvents: 1 1616 | m_DragThreshold: 10 1617 | --- !u!4 &2094731620 1618 | Transform: 1619 | m_ObjectHideFlags: 0 1620 | m_CorrespondingSourceObject: {fileID: 0} 1621 | m_PrefabInstance: {fileID: 0} 1622 | m_PrefabAsset: {fileID: 0} 1623 | m_GameObject: {fileID: 2094731617} 1624 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1625 | m_LocalPosition: {x: 0, y: 0, z: 0} 1626 | m_LocalScale: {x: 1, y: 1, z: 1} 1627 | m_Children: [] 1628 | m_Father: {fileID: 0} 1629 | m_RootOrder: 2 1630 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1631 | --- !u!224 &2102475816 stripped 1632 | RectTransform: 1633 | m_CorrespondingSourceObject: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1634 | m_PrefabInstance: {fileID: 7004583027549909568} 1635 | m_PrefabAsset: {fileID: 0} 1636 | --- !u!1 &2135076106 1637 | GameObject: 1638 | m_ObjectHideFlags: 0 1639 | m_CorrespondingSourceObject: {fileID: 0} 1640 | m_PrefabInstance: {fileID: 0} 1641 | m_PrefabAsset: {fileID: 0} 1642 | serializedVersion: 6 1643 | m_Component: 1644 | - component: {fileID: 2135076109} 1645 | - component: {fileID: 2135076108} 1646 | - component: {fileID: 2135076107} 1647 | m_Layer: 0 1648 | m_Name: Main Camera 1649 | m_TagString: MainCamera 1650 | m_Icon: {fileID: 0} 1651 | m_NavMeshLayer: 0 1652 | m_StaticEditorFlags: 0 1653 | m_IsActive: 1 1654 | --- !u!81 &2135076107 1655 | AudioListener: 1656 | m_ObjectHideFlags: 0 1657 | m_CorrespondingSourceObject: {fileID: 0} 1658 | m_PrefabInstance: {fileID: 0} 1659 | m_PrefabAsset: {fileID: 0} 1660 | m_GameObject: {fileID: 2135076106} 1661 | m_Enabled: 1 1662 | --- !u!20 &2135076108 1663 | Camera: 1664 | m_ObjectHideFlags: 0 1665 | m_CorrespondingSourceObject: {fileID: 0} 1666 | m_PrefabInstance: {fileID: 0} 1667 | m_PrefabAsset: {fileID: 0} 1668 | m_GameObject: {fileID: 2135076106} 1669 | m_Enabled: 1 1670 | serializedVersion: 2 1671 | m_ClearFlags: 1 1672 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 1673 | m_projectionMatrixMode: 1 1674 | m_GateFitMode: 2 1675 | m_FOVAxisMode: 0 1676 | m_SensorSize: {x: 36, y: 24} 1677 | m_LensShift: {x: 0, y: 0} 1678 | m_FocalLength: 50 1679 | m_NormalizedViewPortRect: 1680 | serializedVersion: 2 1681 | x: 0 1682 | y: 0 1683 | width: 1 1684 | height: 1 1685 | near clip plane: 0.3 1686 | far clip plane: 1000 1687 | field of view: 60 1688 | orthographic: 1 1689 | orthographic size: 5 1690 | m_Depth: -1 1691 | m_CullingMask: 1692 | serializedVersion: 2 1693 | m_Bits: 4294967295 1694 | m_RenderingPath: -1 1695 | m_TargetTexture: {fileID: 0} 1696 | m_TargetDisplay: 0 1697 | m_TargetEye: 3 1698 | m_HDR: 1 1699 | m_AllowMSAA: 1 1700 | m_AllowDynamicResolution: 0 1701 | m_ForceIntoRT: 0 1702 | m_OcclusionCulling: 1 1703 | m_StereoConvergence: 10 1704 | m_StereoSeparation: 0.022 1705 | --- !u!4 &2135076109 1706 | Transform: 1707 | m_ObjectHideFlags: 0 1708 | m_CorrespondingSourceObject: {fileID: 0} 1709 | m_PrefabInstance: {fileID: 0} 1710 | m_PrefabAsset: {fileID: 0} 1711 | m_GameObject: {fileID: 2135076106} 1712 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1713 | m_LocalPosition: {x: 0, y: 0, z: -10} 1714 | m_LocalScale: {x: 1, y: 1, z: 1} 1715 | m_Children: [] 1716 | m_Father: {fileID: 0} 1717 | m_RootOrder: 0 1718 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1719 | --- !u!1001 &7004583027549909568 1720 | PrefabInstance: 1721 | m_ObjectHideFlags: 0 1722 | serializedVersion: 2 1723 | m_Modification: 1724 | m_TransformParent: {fileID: 1608879948} 1725 | m_Modifications: 1726 | - target: {fileID: 7004583026823171687, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1727 | propertyPath: m_Name 1728 | value: MyText 1729 | objectReference: {fileID: 0} 1730 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1731 | propertyPath: m_LocalPosition.x 1732 | value: 0 1733 | objectReference: {fileID: 0} 1734 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1735 | propertyPath: m_LocalPosition.y 1736 | value: 0 1737 | objectReference: {fileID: 0} 1738 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1739 | propertyPath: m_LocalPosition.z 1740 | value: 0 1741 | objectReference: {fileID: 0} 1742 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1743 | propertyPath: m_LocalRotation.x 1744 | value: -0 1745 | objectReference: {fileID: 0} 1746 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1747 | propertyPath: m_LocalRotation.y 1748 | value: -0 1749 | objectReference: {fileID: 0} 1750 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1751 | propertyPath: m_LocalRotation.z 1752 | value: -0 1753 | objectReference: {fileID: 0} 1754 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1755 | propertyPath: m_LocalRotation.w 1756 | value: 1 1757 | objectReference: {fileID: 0} 1758 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1759 | propertyPath: m_RootOrder 1760 | value: 0 1761 | objectReference: {fileID: 0} 1762 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1763 | propertyPath: m_LocalEulerAnglesHint.x 1764 | value: 0 1765 | objectReference: {fileID: 0} 1766 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1767 | propertyPath: m_LocalEulerAnglesHint.y 1768 | value: 0 1769 | objectReference: {fileID: 0} 1770 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1771 | propertyPath: m_LocalEulerAnglesHint.z 1772 | value: 0 1773 | objectReference: {fileID: 0} 1774 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1775 | propertyPath: m_AnchoredPosition.x 1776 | value: 803.42676 1777 | objectReference: {fileID: 0} 1778 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1779 | propertyPath: m_AnchoredPosition.y 1780 | value: 0 1781 | objectReference: {fileID: 0} 1782 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1783 | propertyPath: m_SizeDelta.x 1784 | value: 1606.8535 1785 | objectReference: {fileID: 0} 1786 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1787 | propertyPath: m_SizeDelta.y 1788 | value: 0 1789 | objectReference: {fileID: 0} 1790 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1791 | propertyPath: m_AnchorMin.x 1792 | value: 0 1793 | objectReference: {fileID: 0} 1794 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1795 | propertyPath: m_AnchorMin.y 1796 | value: 0 1797 | objectReference: {fileID: 0} 1798 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1799 | propertyPath: m_AnchorMax.x 1800 | value: 0 1801 | objectReference: {fileID: 0} 1802 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1803 | propertyPath: m_AnchorMax.y 1804 | value: 0 1805 | objectReference: {fileID: 0} 1806 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1807 | propertyPath: m_Pivot.x 1808 | value: 0.5 1809 | objectReference: {fileID: 0} 1810 | - target: {fileID: 7004583026823171688, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1811 | propertyPath: m_Pivot.y 1812 | value: 0.5 1813 | objectReference: {fileID: 0} 1814 | m_RemovedComponents: [] 1815 | m_SourcePrefab: {fileID: 100100000, guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3, type: 3} 1816 | -------------------------------------------------------------------------------- /Samples~/Example.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a23d8f9769e337d4682e40fce0f71012 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Samples~/RawResources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 103af4359150e8543aa467d29b505502 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Samples~/RawResources/MyText.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &7004583026823171687 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 7004583026823171688} 12 | - component: {fileID: 7004583026823171690} 13 | - component: {fileID: 7004583026823171689} 14 | - component: {fileID: 7004583026823171691} 15 | m_Layer: 5 16 | m_Name: MyText 17 | m_TagString: Untagged 18 | m_Icon: {fileID: 0} 19 | m_NavMeshLayer: 0 20 | m_StaticEditorFlags: 0 21 | m_IsActive: 1 22 | --- !u!224 &7004583026823171688 23 | RectTransform: 24 | m_ObjectHideFlags: 0 25 | m_CorrespondingSourceObject: {fileID: 0} 26 | m_PrefabInstance: {fileID: 0} 27 | m_PrefabAsset: {fileID: 0} 28 | m_GameObject: {fileID: 7004583026823171687} 29 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 30 | m_LocalPosition: {x: 0, y: 0, z: 0} 31 | m_LocalScale: {x: 1, y: 1, z: 1} 32 | m_Children: [] 33 | m_Father: {fileID: 0} 34 | m_RootOrder: 0 35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 36 | m_AnchorMin: {x: 0, y: 0} 37 | m_AnchorMax: {x: 0, y: 0} 38 | m_AnchoredPosition: {x: 803.42676, y: 0} 39 | m_SizeDelta: {x: 1606.8535, y: 0} 40 | m_Pivot: {x: 0.5, y: 0.5} 41 | --- !u!222 &7004583026823171690 42 | CanvasRenderer: 43 | m_ObjectHideFlags: 0 44 | m_CorrespondingSourceObject: {fileID: 0} 45 | m_PrefabInstance: {fileID: 0} 46 | m_PrefabAsset: {fileID: 0} 47 | m_GameObject: {fileID: 7004583026823171687} 48 | m_CullTransparentMesh: 0 49 | --- !u!114 &7004583026823171689 50 | MonoBehaviour: 51 | m_ObjectHideFlags: 0 52 | m_CorrespondingSourceObject: {fileID: 0} 53 | m_PrefabInstance: {fileID: 0} 54 | m_PrefabAsset: {fileID: 0} 55 | m_GameObject: {fileID: 7004583026823171687} 56 | m_Enabled: 1 57 | m_EditorHideFlags: 0 58 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 59 | m_Name: 60 | m_EditorClassIdentifier: 61 | m_Material: {fileID: 0} 62 | m_Color: {r: 0.0012676716, g: 1, b: 0, a: 1} 63 | m_RaycastTarget: 1 64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 65 | m_Maskable: 1 66 | m_OnCullStateChanged: 67 | m_PersistentCalls: 68 | m_Calls: [] 69 | m_FontData: 70 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 71 | m_FontSize: 189 72 | m_FontStyle: 0 73 | m_BestFit: 0 74 | m_MinSize: 0 75 | m_MaxSize: 300 76 | m_Alignment: 0 77 | m_AlignByGeometry: 0 78 | m_RichText: 1 79 | m_HorizontalOverflow: 0 80 | m_VerticalOverflow: 0 81 | m_LineSpacing: 1 82 | m_Text: Example Text 83 | --- !u!114 &7004583026823171691 84 | MonoBehaviour: 85 | m_ObjectHideFlags: 0 86 | m_CorrespondingSourceObject: {fileID: 0} 87 | m_PrefabInstance: {fileID: 0} 88 | m_PrefabAsset: {fileID: 0} 89 | m_GameObject: {fileID: 7004583026823171687} 90 | m_Enabled: 1 91 | m_EditorHideFlags: 0 92 | m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} 93 | m_Name: 94 | m_EditorClassIdentifier: 95 | m_HorizontalFit: 0 96 | m_VerticalFit: 2 97 | -------------------------------------------------------------------------------- /Samples~/RawResources/MyText.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9bf4dd99c1a4b7d4fbd3263de3fa7cf3 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Samples~/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27ecc931744ec234c8aba9667237109b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Samples~/Scripts/CleanSlider.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | 4 | namespace SaintsBuild.Samples.Scripts 5 | { 6 | public class CleanSlider: MonoBehaviour, IPostProcessScene 7 | { 8 | public Slider slider; 9 | 10 | #if UNITY_EDITOR 11 | public void EditorOnPostProcessScene(bool isBuilding) 12 | { 13 | slider.value = 0; 14 | } 15 | #endif 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Samples~/Scripts/CleanSlider.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd47721f8f434fd187ae662823448b7a 3 | timeCreated: 1706505430 -------------------------------------------------------------------------------- /Samples~/Scripts/TextContainer.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | namespace SaintsBuild.Samples.Scripts 6 | { 7 | public class TextContainer : MonoBehaviour, IPostProcessScene 8 | { 9 | public GameObject prefab; 10 | public Transform container; 11 | 12 | private void Awake() 13 | { 14 | #if UNITY_EDITOR 15 | // in build, the clean process will happen before build 16 | // but in play mode, we need to call it manually 17 | CleanUpExample(); 18 | #endif 19 | 20 | // other works 21 | foreach (int index in Enumerable.Range(0, 5)) 22 | { 23 | GameObject example = Instantiate(prefab, container); 24 | example.GetComponent().text = $"Runtime Awake created {index}"; 25 | } 26 | } 27 | 28 | #if UNITY_EDITOR 29 | public void EditorOnPostProcessScene(bool isBuilding) 30 | { 31 | if (isBuilding) // in building process, Unity will call this function and apply changes to build result 32 | { 33 | CleanUpExample(); 34 | } 35 | else // in play mode, unity will call Awake first, then call this function. Changes will be revoked after exiting play mode 36 | { 37 | // deal conflict with Awake 38 | } 39 | } 40 | 41 | private void CleanUpExample() 42 | { 43 | foreach (Transform eachExample in container.Cast().ToArray()) 44 | { 45 | Debug.Log(eachExample.gameObject.name); 46 | DestroyImmediate(eachExample.gameObject); 47 | } 48 | } 49 | #endif 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Samples~/Scripts/TextContainer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 76c5d0908070c4645a7d1bee607e32cd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "today.comes.saintsbuild", 3 | "version": "1.0.4", 4 | "displayName": "SaintsBuild", 5 | "description": "A Unity plugin for building (packing) process", 6 | "unity": "2020.1", 7 | "dependencies": { 8 | }, 9 | "keywords": [ 10 | "unity", 11 | "inspector" 12 | ], 13 | "category": "editor extensions", 14 | "author": { 15 | "name": "TylerTemp", 16 | "email": "tylertempdev@gmail.com", 17 | "url": "https://saintsbuild.comes.today" 18 | }, 19 | "license": "MIT", 20 | "samples": [ 21 | { 22 | "displayName": "Full Example", 23 | "description": "Full example of this project", 24 | "path": "Samples~" 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cee5021cf57c8b94cb86943ee46e4be7 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------