├── .gitignore ├── Assets ├── EventReferenceSeeker.meta ├── EventReferenceSeeker │ ├── Editor.meta │ ├── Editor │ │ ├── ReferenceFinder.cs │ │ └── ReferenceFinder.cs.meta │ ├── Plugin.meta │ ├── Plugin │ │ ├── YamlDotNet.dll │ │ └── YamlDotNet.dll.meta │ ├── ReferenceHolder.cs │ ├── ReferenceHolder.cs.meta │ ├── SecondReference.cs │ ├── SecondReference.cs.meta │ ├── SelfReferencing.prefab │ ├── SelfReferencing.prefab.meta │ ├── TestScene.unity │ ├── TestScene.unity.meta │ ├── refseek.asset │ └── refseek.asset.meta ├── MissingScriptFinder.meta ├── MissingScriptFinder │ ├── Editor.meta │ ├── Editor │ │ ├── FindMissingScripts.cs │ │ └── FindMissingScripts.cs.meta │ ├── MissingScript.asset │ └── MissingScript.asset.meta ├── PackageDesigner.meta ├── PackageDesigner │ ├── Editor.meta │ ├── Editor │ │ ├── AssetPackage.cs │ │ ├── AssetPackage.cs.meta │ │ ├── PackageDesigner.cs │ │ └── PackageDesigner.cs.meta │ ├── packagedesignerpackage.asset │ └── packagedesignerpackage.asset.meta ├── PackageManagerCheck.meta ├── PackageManagerCheck │ ├── PackageManagerChecker.cs │ ├── PackageManagerChecker.cs.meta │ ├── PackageManagerTestAssembly.asmdef │ ├── PackageManagerTestAssembly.asmdef.meta │ ├── packagemanagercheck.asset │ └── packagemanagercheck.asset.meta ├── PresetImporter.meta └── PresetImporter │ ├── Editor.meta │ ├── Editor │ ├── AssetImporterOptions.cs │ ├── AssetImporterOptions.cs.meta │ ├── DefaultAssetProcessor.cs │ └── DefaultAssetProcessor.cs.meta │ ├── PresetImporter.asset │ ├── PresetImporter.asset.meta │ ├── __importermeshdummy__.obj │ ├── __importermeshdummy__.obj.meta │ ├── __importertexturedummy__.png │ └── __importertexturedummy__.png.meta ├── Packages └── manifest.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset └── UnityConnectSettings.asset ├── Readme.md └── buildpackage.py /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /[Bb]in/ 7 | /Assets/AssetStoreTools* 8 | 9 | # Visual Studio 2015 cache directory 10 | /.vs/ 11 | 12 | # Autogenerated VS/MD/Consulo solution and project files 13 | ExportedObj/ 14 | .consulo/ 15 | *.csproj 16 | *.unityproj 17 | *.sln 18 | *.suo 19 | *.tmp 20 | *.user 21 | *.userprefs 22 | *.pidb 23 | *.booproj 24 | *.svd 25 | *.pdb 26 | 27 | # Unity3D generated meta files 28 | *.pidb.meta 29 | 30 | # Unity3D Generated File On Crash Reports 31 | sysinfo.txt 32 | 33 | # Builds 34 | *.apk 35 | *.unitypackage 36 | Assets/Cinemachine/PostFX/Editor/CinemachinePostFX.unitypackage.meta 37 | Assets/Cinemachine/Timeline/LegacyTimelineAPI.unitypackage.meta 38 | *.swp 39 | .idea 40 | JetBrains 41 | /Assets/Plugins/Editor/JetBrains.meta 42 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c140be435cf7ef9429be37a123e89e2e 3 | folderAsset: yes 4 | timeCreated: 1515753739 5 | licenseType: Pro 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 81759b8a9093f3e45a9d1d940285b055 3 | folderAsset: yes 4 | timeCreated: 1515753948 5 | licenseType: Pro 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Editor/ReferenceFinder.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | using System.Reflection; 6 | using System.Linq; 7 | using System.IO; 8 | using YamlDotNet; 9 | using YamlDotNet.RepresentationModel; 10 | 11 | public class ReferenceFinder : EditorWindow 12 | { 13 | string searchedFunction; 14 | string searchResult = ""; 15 | string valueToSearch = ""; 16 | 17 | System.Type typeSearched; 18 | 19 | string tempSearchResult = ""; 20 | 21 | Vector2 scrollViewPosition; 22 | 23 | List filesList = new List(); 24 | int currentParseFile = 0; 25 | 26 | const string gameObjectIdString = "m_GameObject: {fileID: "; 27 | const string gameObjectNameString = "m_Name: "; 28 | const string gameObjectParentString = "m_Father: {fileID: "; 29 | 30 | [MenuItem("Content Extensions/Find Function References")] 31 | static public void OpenWindow() 32 | { 33 | GetWindow(); 34 | } 35 | 36 | private void Update() 37 | { 38 | if (filesList.Count > currentParseFile) 39 | { 40 | int purcentage = Mathf.FloorToInt(currentParseFile / (float)filesList.Count * 100.0f); 41 | searchResult = "Searching " + purcentage + "%"; 42 | 43 | //HandleFile(filesList[currentParseFile]); 44 | NewHandleFile(filesList[currentParseFile]); 45 | 46 | currentParseFile += 1; 47 | 48 | if (currentParseFile == filesList.Count) 49 | {//reach the end, display the search 50 | searchResult = tempSearchResult; 51 | } 52 | } 53 | 54 | Repaint(); 55 | } 56 | 57 | private void OnGUI() 58 | { 59 | EditorGUILayout.BeginHorizontal(); 60 | searchedFunction = EditorGUILayout.TextField(searchedFunction); 61 | if (GUILayout.Button("Search", GUILayout.Width(50))) 62 | { 63 | Search(); 64 | } 65 | EditorGUILayout.EndHorizontal(); 66 | 67 | EditorGUILayout.BeginScrollView(scrollViewPosition); 68 | GUILayout.Label(searchResult); 69 | EditorGUILayout.EndScrollView(); 70 | } 71 | 72 | private void Search() 73 | { 74 | searchResult = ""; 75 | tempSearchResult = ""; 76 | scrollViewPosition = Vector2.zero; 77 | 78 | int pointPosition = searchedFunction.LastIndexOf('.'); 79 | 80 | if (pointPosition < 0) 81 | { 82 | searchResult = "Malformed search query"; 83 | return; 84 | } 85 | 86 | string objectPath = searchedFunction.Substring(0, pointPosition); 87 | string functionName = searchedFunction.Substring(pointPosition + 1); 88 | 89 | var types = FindType(objectPath); 90 | 91 | if (types.Count() > 1) 92 | { 93 | searchResult = "Ambiguous object name, could be : \n"; 94 | foreach (var t in types) 95 | searchResult += "\t" + t.FullName + "\n"; 96 | return; 97 | } 98 | else if (types.Count() == 0) 99 | { 100 | searchResult = "Could not find object " + objectPath; 101 | return; 102 | } 103 | 104 | var type = types.First(); 105 | 106 | var func = type.FindMembers(MemberTypes.All, BindingFlags.Instance | BindingFlags.Public, new MemberFilter((info, obj) => { return info.Name == (string)obj; }), functionName); 107 | 108 | if (func.Length == 0) 109 | { 110 | searchResult = string.Format("Couldn't find function {0} in object {1}", functionName, objectPath); 111 | return; 112 | } 113 | 114 | if (func[0].MemberType == MemberTypes.Property) 115 | { 116 | PropertyInfo info = func[0] as PropertyInfo; 117 | 118 | valueToSearch = info.GetSetMethod().Name; 119 | } 120 | else 121 | { 122 | valueToSearch = func[0].Name; 123 | } 124 | 125 | typeSearched = type; 126 | //valueToSearch = valueToSearch; 127 | 128 | //Now that we checked the function name exist and is valid, we list all object that is suceptible of having an unity event data to it, meaning Scene & prefab. 129 | filesList = new List(); 130 | filesList.AddRange(Directory.GetFiles(Application.dataPath, "*.unity", SearchOption.AllDirectories)); 131 | filesList.AddRange(Directory.GetFiles(Application.dataPath, "*.prefab", SearchOption.AllDirectories)); 132 | 133 | currentParseFile = 0; 134 | } 135 | 136 | public class YamlVisitorEvent : IYamlVisitor 137 | { 138 | public ReferenceFinder referenceFinder; 139 | public bool havePersistentCall = false; 140 | public HashSet idToCheck = new HashSet(); 141 | 142 | public void Visit(YamlStream stream) 143 | { 144 | 145 | } 146 | 147 | public void Visit(YamlDocument document) 148 | { 149 | 150 | } 151 | 152 | public void Visit(YamlScalarNode scalar) 153 | { 154 | 155 | } 156 | 157 | public void Visit(YamlSequenceNode sequence) 158 | { 159 | 160 | } 161 | 162 | public void Visit(YamlMappingNode mapping) 163 | { 164 | foreach(var n in mapping) 165 | { 166 | n.Value.Accept(this); 167 | if(((YamlScalarNode)n.Key).Value == "m_PersistentCalls") 168 | { 169 | var callsSequence = n.Value["m_Calls"] as YamlSequenceNode; 170 | 171 | foreach(var call in callsSequence) 172 | { 173 | if(((YamlScalarNode)call["m_MethodName"]).Value == referenceFinder.valueToSearch) 174 | { 175 | havePersistentCall = true; 176 | idToCheck.Add(((YamlScalarNode)call["m_Target"]["fileID"]).Value); 177 | } 178 | } 179 | } 180 | } 181 | } 182 | } 183 | 184 | private void NewHandleFile(string file) 185 | { 186 | bool filenameWrote = false; 187 | 188 | var fileContent = File.ReadAllText(file); 189 | //unity seem to use non valid yaml by added a "stripped" keyword on object that are linked to a prefab. Since the pareser itch on those, we remove them 190 | fileContent = fileContent.Replace("stripped", ""); 191 | var input = new StringReader(fileContent); 192 | 193 | var yaml = new YamlStream(); 194 | yaml.Load(input); 195 | 196 | YamlVisitorEvent visitor = new YamlVisitorEvent(); 197 | visitor.referenceFinder = this; 198 | 199 | //map gameobject id to a hashset of monobehaviour to check for type against the searched type 200 | Dictionary> gameobjectToIdToCheck = new Dictionary>(); 201 | 202 | //we store the anchor <-> node mapping, as there don't seem to be anyway to do that quickly through the YAml graph 203 | Dictionary parsedNodes = new Dictionary(); 204 | 205 | foreach (var doc in yaml.Documents) 206 | { 207 | var root = (YamlMappingNode)doc.RootNode; 208 | 209 | parsedNodes[root.Anchor] = root; 210 | 211 | foreach (var node in root.Children) 212 | { 213 | var scalarNode = (YamlScalarNode) node.Key; 214 | if (scalarNode.Value == "MonoBehaviour") 215 | {//if it's a monobehaviour, it may have a list of event as child 216 | YamlMappingNode sequenceNode = node.Value as YamlMappingNode; 217 | 218 | visitor.havePersistentCall = false; 219 | visitor.idToCheck.Clear(); 220 | sequenceNode.Accept(visitor); 221 | 222 | if(visitor.havePersistentCall) 223 | {//we found persistent call 224 | string gameobjectID = ((YamlScalarNode)node.Value["m_GameObject"]["fileID"]).Value; 225 | 226 | if (!gameobjectToIdToCheck.ContainsKey(gameobjectID)) 227 | gameobjectToIdToCheck[gameobjectID] = new HashSet(); 228 | 229 | gameobjectToIdToCheck[gameobjectID].UnionWith(visitor.idToCheck); 230 | } 231 | } 232 | } 233 | } 234 | 235 | //now we go over all our gameobject to check, and if one of the monobehaviour they ahve been associated with are of the researched type, they are added to the result 236 | foreach(var pair in gameobjectToIdToCheck) 237 | { 238 | bool haveOneValidCall = false; 239 | if(!parsedNodes.ContainsKey(pair.Key)) 240 | { 241 | Debug.LogError("Tried to check an object id that don't exist : " + pair.Key); 242 | continue; 243 | } 244 | 245 | foreach(var id in pair.Value) 246 | { 247 | var targetNode = parsedNodes[id]; 248 | var guid = ((YamlScalarNode)targetNode["MonoBehaviour"]["m_Script"]["guid"]).Value; 249 | 250 | MonoScript script = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)); 251 | 252 | if(script.GetClass() == typeSearched) 253 | { 254 | haveOneValidCall = true; 255 | } 256 | } 257 | 258 | if(haveOneValidCall) 259 | { 260 | if (!filenameWrote) 261 | { 262 | filenameWrote = true; 263 | tempSearchResult += Path.GetFileName(file) + "\n"; 264 | } 265 | 266 | if (((YamlScalarNode)parsedNodes[pair.Key]["GameObject"]["m_PrefabParentObject"]["fileID"]).Value != "0") 267 | {//this is a prefab instance, need to find the prefab value linked to it!! 268 | 269 | 270 | 271 | tempSearchResult += "\t" + "A Prefab \n"; 272 | } 273 | else 274 | { 275 | string fullPath = ""; 276 | 277 | //make an assumption here that the 1st component of every gameobject will always be its transform. 278 | string currentGOId = pair.Key; 279 | while(currentGOId != "0") 280 | { 281 | fullPath = parsedNodes[currentGOId]["GameObject"]["m_Name"] + (fullPath == "" ? "" : "/" + fullPath); 282 | 283 | string transformID = parsedNodes[currentGOId]["GameObject"]["m_Component"][0]["component"]["fileID"].ToString(); 284 | 285 | Debug.Log("TransformID " + transformID); 286 | 287 | string parentTransformID = parsedNodes[transformID].Children.Values.ElementAt(0)["m_Father"]["fileID"].ToString(); 288 | Debug.Log("Parent transform ID " + parentTransformID); 289 | if (parentTransformID != "0") 290 | { 291 | currentGOId = parsedNodes[parentTransformID].Children.Values.ElementAt(0)["m_GameObject"]["fileID"].ToString(); 292 | } 293 | else 294 | currentGOId = "0"; 295 | 296 | Debug.Log("currentGOID " + currentGOId); 297 | } 298 | 299 | tempSearchResult += "\t" + fullPath + "\n"; 300 | } 301 | } 302 | } 303 | } 304 | 305 | private void HandleFile(string file) 306 | { 307 | bool nameWritten = false; 308 | 309 | string relativePath = file.Replace(Application.dataPath, "Assets"); 310 | Debug.Log(relativePath); 311 | Debug.Log(AssetDatabase.AssetPathToGUID(relativePath)); 312 | 313 | string content = File.ReadAllText(file); 314 | 315 | //we're doing rough simple parsing here, not robust but way faster than deserializing the YAML & going through object etc... 316 | int index = content.IndexOf(valueToSearch); 317 | do 318 | {//as long as we find the line that point to a reference to that function, we then search backward the line that designate which gameobject the bahviour is one 319 | int gameobjectIndex = content.LastIndexOf(gameObjectIdString, index); 320 | if (gameobjectIndex == -1) gameobjectIndex = content.LastIndexOf(gameObjectIdString, index); 321 | 322 | if (gameobjectIndex != -1) 323 | {//we extract the id of said gameobject 324 | //correct the id to be at the end of the string, so in front of the number 325 | gameobjectIndex = gameobjectIndex + gameObjectIdString.Length; 326 | string id = content.Substring(gameobjectIndex, content.IndexOf('}', gameobjectIndex) - gameobjectIndex); 327 | 328 | string foundName = GetObjectName(content, id, gameobjectIndex); 329 | 330 | if (!nameWritten) 331 | { 332 | tempSearchResult += Path.GetFileName(file) + ":\n"; 333 | nameWritten = true; 334 | } 335 | 336 | tempSearchResult += "\t" + foundName + "\n"; 337 | } 338 | 339 | index = content.IndexOf(valueToSearch, index + 10); 340 | } 341 | while (index != -1); 342 | 343 | //TODO : handle prefab override in scene, as it is saved in a different place! 344 | } 345 | 346 | private string GetObjectName(string content, string gameobjectID, int startIndex) 347 | { 348 | try 349 | { 350 | string fatherName = ""; 351 | //now we find the id in the file to retrieve the name... 352 | int parentGOIndex = content.LastIndexOf("&" + gameobjectID, startIndex); 353 | //if it wasn't found, search in the other direction (most of the time, it will be above, but in some case it can be inverted) 354 | if (parentGOIndex == -1) parentGOIndex = content.IndexOf("&" + gameobjectID, startIndex); 355 | 356 | //we check if that object was "stripped". A stripped gameobject don't have any info, it is just a link to a prefab, so we have to go fetch the prefab data? 357 | 358 | 359 | //if that object have a parent, we go fetch the name of it recursivly too 360 | int fatherIDPlaceIndex = content.IndexOf(gameObjectParentString, parentGOIndex); 361 | if (fatherIDPlaceIndex != -1) 362 | { 363 | fatherIDPlaceIndex = fatherIDPlaceIndex + gameObjectParentString.Length; 364 | string id = content.Substring(fatherIDPlaceIndex, content.IndexOf('}', fatherIDPlaceIndex) - fatherIDPlaceIndex); 365 | if (id != "0") 366 | { //the id is the id of the TRANSFORM, not the gameobject, so need to find the gameobject associated to that transform 367 | 368 | int parentTransformIndex = content.LastIndexOf("&" + id, parentGOIndex); 369 | if (parentTransformIndex == -1) parentTransformIndex = content.IndexOf("&" + id, parentGOIndex); 370 | 371 | int parentgoidindex = content.IndexOf(gameObjectIdString, parentTransformIndex); 372 | parentgoidindex = parentgoidindex + gameObjectIdString.Length; 373 | string parentGOID = content.Substring(parentgoidindex, content.IndexOf('}', parentgoidindex) - parentgoidindex); ; 374 | 375 | fatherName = GetObjectName(content, parentGOID, parentGOIndex) + "/"; 376 | } 377 | } 378 | 379 | int nameIndex = content.IndexOf(gameObjectNameString, parentGOIndex) + gameObjectNameString.Length; 380 | return fatherName + content.Substring(nameIndex, content.IndexOf("\n", nameIndex) - nameIndex); 381 | } 382 | catch (System.Exception e) 383 | { 384 | Debug.Log(e.Message); 385 | } 386 | 387 | return "ERROR"; 388 | } 389 | 390 | private static IEnumerable FindType(string fullName) 391 | { 392 | return 393 | System.AppDomain.CurrentDomain.GetAssemblies() 394 | .SelectMany(a => a.GetTypes()) 395 | .Where(t => t.FullName.Equals(fullName)); 396 | } 397 | } 398 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Editor/ReferenceFinder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ee27f1f15c24f642a8c564ccfcc1ad9 3 | timeCreated: 1515754146 4 | licenseType: Pro 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Plugin.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66821c6916710794e8f89174f15f92be 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Plugin/YamlDotNet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Unity-Technologies/ToolsCollection/baa5da7800cd7f3802fd61968700ed5b08f70665/Assets/EventReferenceSeeker/Plugin/YamlDotNet.dll -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/Plugin/YamlDotNet.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e661903909feea498f833199291d65b 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | isPreloaded: 0 9 | isOverridable: 0 10 | platformData: 11 | - first: 12 | '': Any 13 | second: 14 | enabled: 0 15 | settings: 16 | Exclude Android: 1 17 | Exclude Editor: 0 18 | Exclude Linux: 1 19 | Exclude Linux64: 1 20 | Exclude LinuxUniversal: 1 21 | Exclude OSXUniversal: 1 22 | Exclude Win: 1 23 | Exclude Win64: 1 24 | - first: 25 | Android: Android 26 | second: 27 | enabled: 0 28 | settings: 29 | CPU: ARMv7 30 | - first: 31 | Any: 32 | second: 33 | enabled: 0 34 | settings: {} 35 | - first: 36 | Editor: Editor 37 | second: 38 | enabled: 1 39 | settings: 40 | CPU: AnyCPU 41 | DefaultValueInitialized: true 42 | OS: AnyOS 43 | - first: 44 | Facebook: Win 45 | second: 46 | enabled: 0 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Facebook: Win64 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: AnyCPU 55 | - first: 56 | Standalone: Linux 57 | second: 58 | enabled: 0 59 | settings: 60 | CPU: x86 61 | - first: 62 | Standalone: Linux64 63 | second: 64 | enabled: 0 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: LinuxUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: None 73 | - first: 74 | Standalone: OSXUniversal 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: AnyCPU 79 | - first: 80 | Standalone: Win 81 | second: 82 | enabled: 0 83 | settings: 84 | CPU: AnyCPU 85 | - first: 86 | Standalone: Win64 87 | second: 88 | enabled: 0 89 | settings: 90 | CPU: AnyCPU 91 | - first: 92 | Windows Store Apps: WindowsStoreApps 93 | second: 94 | enabled: 0 95 | settings: 96 | CPU: AnyCPU 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/ReferenceHolder.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | public class ReferenceHolder : MonoBehaviour 7 | { 8 | [System.Serializable] 9 | public class InternalClassTest 10 | { 11 | public UnityEvent internalEventTest; 12 | } 13 | 14 | public UnityEvent testEvent; 15 | public InternalClassTest nestedClass; 16 | 17 | // Use this for initialization 18 | void Start () { 19 | 20 | } 21 | 22 | // Update is called once per frame 23 | void Update () { 24 | 25 | } 26 | 27 | public void TestFunction() 28 | { 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/ReferenceHolder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 69bfbb65fdb39f543834aa739238a030 3 | timeCreated: 1515753752 4 | licenseType: Pro 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/SecondReference.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | public class SecondReference : MonoBehaviour 7 | { 8 | public UnityEvent testEvent; 9 | 10 | // Use this for initialization 11 | void Start() 12 | { 13 | 14 | } 15 | 16 | // Update is called once per frame 17 | void Update() 18 | { 19 | 20 | } 21 | 22 | public void TestFunction() 23 | { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/SecondReference.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55bb9fb850a216545a5d092c82dc2969 3 | timeCreated: 1515776057 4 | licenseType: Pro 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/SelfReferencing.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1137414040139544} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1137414040139544 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 5 20 | m_Component: 21 | - component: {fileID: 4408908228923810} 22 | - component: {fileID: 114029366918068512} 23 | m_Layer: 0 24 | m_Name: SelfReferencing 25 | m_TagString: Untagged 26 | m_Icon: {fileID: 0} 27 | m_NavMeshLayer: 0 28 | m_StaticEditorFlags: 0 29 | m_IsActive: 1 30 | --- !u!1 &1444195426749268 31 | GameObject: 32 | m_ObjectHideFlags: 0 33 | m_PrefabParentObject: {fileID: 0} 34 | m_PrefabInternal: {fileID: 100100000} 35 | serializedVersion: 5 36 | m_Component: 37 | - component: {fileID: 4613899140347562} 38 | - component: {fileID: 114585998097588646} 39 | - component: {fileID: 114490694360325714} 40 | m_Layer: 0 41 | m_Name: SelfReferencingChild 42 | m_TagString: Untagged 43 | m_Icon: {fileID: 0} 44 | m_NavMeshLayer: 0 45 | m_StaticEditorFlags: 0 46 | m_IsActive: 1 47 | --- !u!4 &4408908228923810 48 | Transform: 49 | m_ObjectHideFlags: 1 50 | m_PrefabParentObject: {fileID: 0} 51 | m_PrefabInternal: {fileID: 100100000} 52 | m_GameObject: {fileID: 1137414040139544} 53 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 54 | m_LocalPosition: {x: 0, y: 0, z: 0} 55 | m_LocalScale: {x: 1, y: 1, z: 1} 56 | m_Children: 57 | - {fileID: 4613899140347562} 58 | m_Father: {fileID: 0} 59 | m_RootOrder: 0 60 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 61 | --- !u!4 &4613899140347562 62 | Transform: 63 | m_ObjectHideFlags: 1 64 | m_PrefabParentObject: {fileID: 0} 65 | m_PrefabInternal: {fileID: 100100000} 66 | m_GameObject: {fileID: 1444195426749268} 67 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 68 | m_LocalPosition: {x: 0, y: 0, z: 0} 69 | m_LocalScale: {x: 1, y: 1, z: 1} 70 | m_Children: [] 71 | m_Father: {fileID: 4408908228923810} 72 | m_RootOrder: 0 73 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 74 | --- !u!114 &114029366918068512 75 | MonoBehaviour: 76 | m_ObjectHideFlags: 1 77 | m_PrefabParentObject: {fileID: 0} 78 | m_PrefabInternal: {fileID: 100100000} 79 | m_GameObject: {fileID: 1137414040139544} 80 | m_Enabled: 1 81 | m_EditorHideFlags: 0 82 | m_Script: {fileID: 11500000, guid: 69bfbb65fdb39f543834aa739238a030, type: 3} 83 | m_Name: 84 | m_EditorClassIdentifier: 85 | testEvent: 86 | m_PersistentCalls: 87 | m_Calls: 88 | - m_Target: {fileID: 114029366918068512} 89 | m_MethodName: TestFunction 90 | m_Mode: 1 91 | m_Arguments: 92 | m_ObjectArgument: {fileID: 0} 93 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 94 | m_IntArgument: 0 95 | m_FloatArgument: 0 96 | m_StringArgument: 97 | m_BoolArgument: 0 98 | m_CallState: 2 99 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 100 | Culture=neutral, PublicKeyToken=null 101 | nestedClass: 102 | internalEventTest: 103 | m_PersistentCalls: 104 | m_Calls: [] 105 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 106 | Culture=neutral, PublicKeyToken=null 107 | --- !u!114 &114490694360325714 108 | MonoBehaviour: 109 | m_ObjectHideFlags: 1 110 | m_PrefabParentObject: {fileID: 0} 111 | m_PrefabInternal: {fileID: 100100000} 112 | m_GameObject: {fileID: 1444195426749268} 113 | m_Enabled: 1 114 | m_EditorHideFlags: 0 115 | m_Script: {fileID: 11500000, guid: 55bb9fb850a216545a5d092c82dc2969, type: 3} 116 | m_Name: 117 | m_EditorClassIdentifier: 118 | testEvent: 119 | m_PersistentCalls: 120 | m_Calls: [] 121 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 122 | Culture=neutral, PublicKeyToken=null 123 | --- !u!114 &114585998097588646 124 | MonoBehaviour: 125 | m_ObjectHideFlags: 1 126 | m_PrefabParentObject: {fileID: 0} 127 | m_PrefabInternal: {fileID: 100100000} 128 | m_GameObject: {fileID: 1444195426749268} 129 | m_Enabled: 1 130 | m_EditorHideFlags: 0 131 | m_Script: {fileID: 11500000, guid: 69bfbb65fdb39f543834aa739238a030, type: 3} 132 | m_Name: 133 | m_EditorClassIdentifier: 134 | testEvent: 135 | m_PersistentCalls: 136 | m_Calls: 137 | - m_Target: {fileID: 114585998097588646} 138 | m_MethodName: TestFunction 139 | m_Mode: 1 140 | m_Arguments: 141 | m_ObjectArgument: {fileID: 0} 142 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 143 | m_IntArgument: 0 144 | m_FloatArgument: 0 145 | m_StringArgument: 146 | m_BoolArgument: 0 147 | m_CallState: 2 148 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 149 | Culture=neutral, PublicKeyToken=null 150 | nestedClass: 151 | internalEventTest: 152 | m_PersistentCalls: 153 | m_Calls: 154 | - m_Target: {fileID: 114490694360325714} 155 | m_MethodName: TestFunction 156 | m_Mode: 1 157 | m_Arguments: 158 | m_ObjectArgument: {fileID: 0} 159 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 160 | m_IntArgument: 0 161 | m_FloatArgument: 0 162 | m_StringArgument: 163 | m_BoolArgument: 0 164 | m_CallState: 2 165 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 166 | Culture=neutral, PublicKeyToken=null 167 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/SelfReferencing.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 52ada1a644f5af545ac2db9ea630615f 3 | timeCreated: 1515754493 4 | licenseType: Pro 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 100100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/TestScene.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: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 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.44657874, g: 0.49641258, b: 0.5748172, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 0 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_TemporalCoherenceThreshold: 1 54 | m_EnvironmentLightingMode: 0 55 | m_EnableBakedLightmaps: 1 56 | m_EnableRealtimeLightmaps: 1 57 | m_LightmapEditorSettings: 58 | serializedVersion: 10 59 | m_Resolution: 2 60 | m_BakeResolution: 40 61 | m_AtlasSize: 1024 62 | m_AO: 0 63 | m_AOMaxDistance: 1 64 | m_CompAOExponent: 1 65 | m_CompAOExponentDirect: 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: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVRFilterTypeDirect: 0 81 | m_PVRFilterTypeIndirect: 0 82 | m_PVRFilterTypeAO: 0 83 | m_PVRFilteringMode: 1 84 | m_PVRCulling: 1 85 | m_PVRFilteringGaussRadiusDirect: 1 86 | m_PVRFilteringGaussRadiusIndirect: 5 87 | m_PVRFilteringGaussRadiusAO: 2 88 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 89 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 90 | m_PVRFilteringAtrousPositionSigmaAO: 1 91 | m_ShowResolutionOverlay: 1 92 | m_LightingDataAsset: {fileID: 0} 93 | m_UseShadowmask: 1 94 | --- !u!196 &4 95 | NavMeshSettings: 96 | serializedVersion: 2 97 | m_ObjectHideFlags: 0 98 | m_BuildSettings: 99 | serializedVersion: 2 100 | agentTypeID: 0 101 | agentRadius: 0.5 102 | agentHeight: 2 103 | agentSlope: 45 104 | agentClimb: 0.4 105 | ledgeDropHeight: 0 106 | maxJumpAcrossDistance: 0 107 | minRegionArea: 2 108 | manualCellSize: 0 109 | cellSize: 0.16666667 110 | manualTileSize: 0 111 | tileSize: 256 112 | accuratePlacement: 0 113 | debug: 114 | m_Flags: 0 115 | m_NavMeshData: {fileID: 0} 116 | --- !u!1 &5829211 117 | GameObject: 118 | m_ObjectHideFlags: 0 119 | m_PrefabParentObject: {fileID: 0} 120 | m_PrefabInternal: {fileID: 0} 121 | serializedVersion: 5 122 | m_Component: 123 | - component: {fileID: 5829215} 124 | - component: {fileID: 5829214} 125 | - component: {fileID: 5829213} 126 | - component: {fileID: 5829212} 127 | m_Layer: 5 128 | m_Name: Canvas 129 | m_TagString: Untagged 130 | m_Icon: {fileID: 0} 131 | m_NavMeshLayer: 0 132 | m_StaticEditorFlags: 0 133 | m_IsActive: 1 134 | --- !u!114 &5829212 135 | MonoBehaviour: 136 | m_ObjectHideFlags: 0 137 | m_PrefabParentObject: {fileID: 0} 138 | m_PrefabInternal: {fileID: 0} 139 | m_GameObject: {fileID: 5829211} 140 | m_Enabled: 1 141 | m_EditorHideFlags: 0 142 | m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 143 | m_Name: 144 | m_EditorClassIdentifier: 145 | m_IgnoreReversedGraphics: 1 146 | m_BlockingObjects: 0 147 | m_BlockingMask: 148 | serializedVersion: 2 149 | m_Bits: 4294967295 150 | --- !u!114 &5829213 151 | MonoBehaviour: 152 | m_ObjectHideFlags: 0 153 | m_PrefabParentObject: {fileID: 0} 154 | m_PrefabInternal: {fileID: 0} 155 | m_GameObject: {fileID: 5829211} 156 | m_Enabled: 1 157 | m_EditorHideFlags: 0 158 | m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 159 | m_Name: 160 | m_EditorClassIdentifier: 161 | m_UiScaleMode: 0 162 | m_ReferencePixelsPerUnit: 100 163 | m_ScaleFactor: 1 164 | m_ReferenceResolution: {x: 800, y: 600} 165 | m_ScreenMatchMode: 0 166 | m_MatchWidthOrHeight: 0 167 | m_PhysicalUnit: 3 168 | m_FallbackScreenDPI: 96 169 | m_DefaultSpriteDPI: 96 170 | m_DynamicPixelsPerUnit: 1 171 | --- !u!223 &5829214 172 | Canvas: 173 | m_ObjectHideFlags: 0 174 | m_PrefabParentObject: {fileID: 0} 175 | m_PrefabInternal: {fileID: 0} 176 | m_GameObject: {fileID: 5829211} 177 | m_Enabled: 1 178 | serializedVersion: 3 179 | m_RenderMode: 0 180 | m_Camera: {fileID: 0} 181 | m_PlaneDistance: 100 182 | m_PixelPerfect: 0 183 | m_ReceivesEvents: 1 184 | m_OverrideSorting: 0 185 | m_OverridePixelPerfect: 0 186 | m_SortingBucketNormalizedSize: 0 187 | m_AdditionalShaderChannelsFlag: 0 188 | m_SortingLayerID: 0 189 | m_SortingOrder: 0 190 | m_TargetDisplay: 0 191 | --- !u!224 &5829215 192 | RectTransform: 193 | m_ObjectHideFlags: 0 194 | m_PrefabParentObject: {fileID: 0} 195 | m_PrefabInternal: {fileID: 0} 196 | m_GameObject: {fileID: 5829211} 197 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 198 | m_LocalPosition: {x: 0, y: 0, z: 0} 199 | m_LocalScale: {x: 0, y: 0, z: 0} 200 | m_Children: 201 | - {fileID: 1139883606} 202 | m_Father: {fileID: 0} 203 | m_RootOrder: 3 204 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 205 | m_AnchorMin: {x: 0, y: 0} 206 | m_AnchorMax: {x: 0, y: 0} 207 | m_AnchoredPosition: {x: 0, y: 0} 208 | m_SizeDelta: {x: 0, y: 0} 209 | m_Pivot: {x: 0, y: 0} 210 | --- !u!1001 &196098859 211 | Prefab: 212 | m_ObjectHideFlags: 0 213 | serializedVersion: 2 214 | m_Modification: 215 | m_TransformParent: {fileID: 0} 216 | m_Modifications: 217 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 218 | type: 2} 219 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.size 220 | value: 2 221 | objectReference: {fileID: 0} 222 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 223 | propertyPath: m_LocalPosition.x 224 | value: 0 225 | objectReference: {fileID: 0} 226 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 227 | propertyPath: m_LocalPosition.y 228 | value: 0 229 | objectReference: {fileID: 0} 230 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 231 | propertyPath: m_LocalPosition.z 232 | value: 0 233 | objectReference: {fileID: 0} 234 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 235 | propertyPath: m_LocalRotation.x 236 | value: 0 237 | objectReference: {fileID: 0} 238 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 239 | propertyPath: m_LocalRotation.y 240 | value: 0 241 | objectReference: {fileID: 0} 242 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 243 | propertyPath: m_LocalRotation.z 244 | value: 0 245 | objectReference: {fileID: 0} 246 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 247 | propertyPath: m_LocalRotation.w 248 | value: 1 249 | objectReference: {fileID: 0} 250 | - target: {fileID: 4613899140347562, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 251 | propertyPath: m_RootOrder 252 | value: 5 253 | objectReference: {fileID: 0} 254 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 255 | type: 2} 256 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target 257 | value: 258 | objectReference: {fileID: 196098860} 259 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 260 | type: 2} 261 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName 262 | value: TestFunction 263 | objectReference: {fileID: 0} 264 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 265 | type: 2} 266 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode 267 | value: 1 268 | objectReference: {fileID: 0} 269 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 270 | type: 2} 271 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[1].m_Mode 272 | value: 1 273 | objectReference: {fileID: 0} 274 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 275 | type: 2} 276 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[1].m_CallState 277 | value: 2 278 | objectReference: {fileID: 0} 279 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 280 | type: 2} 281 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[1].m_Target 282 | value: 283 | objectReference: {fileID: 196098862} 284 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 285 | type: 2} 286 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[1].m_MethodName 287 | value: TestFunction 288 | objectReference: {fileID: 0} 289 | - target: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 290 | type: 2} 291 | propertyPath: testEvent.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName 292 | value: UnityEngine.Object, UnityEngine 293 | objectReference: {fileID: 0} 294 | - target: {fileID: 1137414040139544, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 295 | propertyPath: m_Name 296 | value: SelfReferencingRenamed 297 | objectReference: {fileID: 0} 298 | - target: {fileID: 1444195426749268, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 299 | propertyPath: m_Name 300 | value: SelfReferencingChildRenamed 301 | objectReference: {fileID: 0} 302 | m_RemovedComponents: [] 303 | m_ParentPrefab: {fileID: 100100000, guid: 52ada1a644f5af545ac2db9ea630615f, type: 2} 304 | m_IsPrefabParent: 0 305 | --- !u!114 &196098860 stripped 306 | MonoBehaviour: 307 | m_PrefabParentObject: {fileID: 114585998097588646, guid: 52ada1a644f5af545ac2db9ea630615f, 308 | type: 2} 309 | m_PrefabInternal: {fileID: 196098859} 310 | m_Script: {fileID: 11500000, guid: 69bfbb65fdb39f543834aa739238a030, type: 3} 311 | --- !u!1 &196098861 stripped 312 | GameObject: 313 | m_PrefabParentObject: {fileID: 1444195426749268, guid: 52ada1a644f5af545ac2db9ea630615f, 314 | type: 2} 315 | m_PrefabInternal: {fileID: 196098859} 316 | --- !u!114 &196098862 317 | MonoBehaviour: 318 | m_ObjectHideFlags: 0 319 | m_PrefabParentObject: {fileID: 0} 320 | m_PrefabInternal: {fileID: 0} 321 | m_GameObject: {fileID: 196098861} 322 | m_Enabled: 1 323 | m_EditorHideFlags: 0 324 | m_Script: {fileID: 11500000, guid: 55bb9fb850a216545a5d092c82dc2969, type: 3} 325 | m_Name: 326 | m_EditorClassIdentifier: 327 | testEvent: 328 | m_PersistentCalls: 329 | m_Calls: 330 | - m_Target: {fileID: 196098860} 331 | m_MethodName: TestFunction 332 | m_Mode: 1 333 | m_Arguments: 334 | m_ObjectArgument: {fileID: 0} 335 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 336 | m_IntArgument: 0 337 | m_FloatArgument: 0 338 | m_StringArgument: 339 | m_BoolArgument: 0 340 | m_CallState: 2 341 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 342 | Culture=neutral, PublicKeyToken=null 343 | --- !u!1 &765536183 344 | GameObject: 345 | m_ObjectHideFlags: 0 346 | m_PrefabParentObject: {fileID: 0} 347 | m_PrefabInternal: {fileID: 0} 348 | serializedVersion: 5 349 | m_Component: 350 | - component: {fileID: 765536185} 351 | - component: {fileID: 765536184} 352 | m_Layer: 0 353 | m_Name: TestObject 354 | m_TagString: Untagged 355 | m_Icon: {fileID: 0} 356 | m_NavMeshLayer: 0 357 | m_StaticEditorFlags: 0 358 | m_IsActive: 1 359 | --- !u!114 &765536184 360 | MonoBehaviour: 361 | m_ObjectHideFlags: 0 362 | m_PrefabParentObject: {fileID: 0} 363 | m_PrefabInternal: {fileID: 0} 364 | m_GameObject: {fileID: 765536183} 365 | m_Enabled: 1 366 | m_EditorHideFlags: 0 367 | m_Script: {fileID: 11500000, guid: 69bfbb65fdb39f543834aa739238a030, type: 3} 368 | m_Name: 369 | m_EditorClassIdentifier: 370 | testEvent: 371 | m_PersistentCalls: 372 | m_Calls: 373 | - m_Target: {fileID: 765536184} 374 | m_MethodName: TestFunction 375 | m_Mode: 1 376 | m_Arguments: 377 | m_ObjectArgument: {fileID: 0} 378 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 379 | m_IntArgument: 0 380 | m_FloatArgument: 0 381 | m_StringArgument: 382 | m_BoolArgument: 0 383 | m_CallState: 2 384 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 385 | Culture=neutral, PublicKeyToken=null 386 | nestedClass: 387 | internalEventTest: 388 | m_PersistentCalls: 389 | m_Calls: 390 | - m_Target: {fileID: 765536184} 391 | m_MethodName: TestFunction 392 | m_Mode: 1 393 | m_Arguments: 394 | m_ObjectArgument: {fileID: 0} 395 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 396 | m_IntArgument: 0 397 | m_FloatArgument: 0 398 | m_StringArgument: 399 | m_BoolArgument: 0 400 | m_CallState: 2 401 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 402 | Culture=neutral, PublicKeyToken=null 403 | --- !u!4 &765536185 404 | Transform: 405 | m_ObjectHideFlags: 0 406 | m_PrefabParentObject: {fileID: 0} 407 | m_PrefabInternal: {fileID: 0} 408 | m_GameObject: {fileID: 765536183} 409 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 410 | m_LocalPosition: {x: -612.5, y: -321, z: 0} 411 | m_LocalScale: {x: 1, y: 1, z: 1} 412 | m_Children: [] 413 | m_Father: {fileID: 1139883606} 414 | m_RootOrder: 1 415 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 416 | --- !u!1 &799225995 417 | GameObject: 418 | m_ObjectHideFlags: 0 419 | m_PrefabParentObject: {fileID: 0} 420 | m_PrefabInternal: {fileID: 0} 421 | serializedVersion: 5 422 | m_Component: 423 | - component: {fileID: 799225999} 424 | - component: {fileID: 799225996} 425 | - component: {fileID: 799225998} 426 | - component: {fileID: 799225997} 427 | m_Layer: 0 428 | m_Name: Main Camera 429 | m_TagString: MainCamera 430 | m_Icon: {fileID: 0} 431 | m_NavMeshLayer: 0 432 | m_StaticEditorFlags: 0 433 | m_IsActive: 1 434 | --- !u!20 &799225996 435 | Camera: 436 | m_ObjectHideFlags: 0 437 | m_PrefabParentObject: {fileID: 0} 438 | m_PrefabInternal: {fileID: 0} 439 | m_GameObject: {fileID: 799225995} 440 | m_Enabled: 1 441 | serializedVersion: 2 442 | m_ClearFlags: 1 443 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 444 | m_NormalizedViewPortRect: 445 | serializedVersion: 2 446 | x: 0 447 | y: 0 448 | width: 1 449 | height: 1 450 | near clip plane: 0.3 451 | far clip plane: 1000 452 | field of view: 60 453 | orthographic: 0 454 | orthographic size: 5 455 | m_Depth: -1 456 | m_CullingMask: 457 | serializedVersion: 2 458 | m_Bits: 4294967295 459 | m_RenderingPath: -1 460 | m_TargetTexture: {fileID: 0} 461 | m_TargetDisplay: 0 462 | m_TargetEye: 3 463 | m_HDR: 1 464 | m_AllowMSAA: 1 465 | m_AllowDynamicResolution: 0 466 | m_ForceIntoRT: 0 467 | m_OcclusionCulling: 1 468 | m_StereoConvergence: 10 469 | m_StereoSeparation: 0.022 470 | --- !u!81 &799225997 471 | AudioListener: 472 | m_ObjectHideFlags: 0 473 | m_PrefabParentObject: {fileID: 0} 474 | m_PrefabInternal: {fileID: 0} 475 | m_GameObject: {fileID: 799225995} 476 | m_Enabled: 1 477 | --- !u!124 &799225998 478 | Behaviour: 479 | m_ObjectHideFlags: 0 480 | m_PrefabParentObject: {fileID: 0} 481 | m_PrefabInternal: {fileID: 0} 482 | m_GameObject: {fileID: 799225995} 483 | m_Enabled: 1 484 | --- !u!4 &799225999 485 | Transform: 486 | m_ObjectHideFlags: 0 487 | m_PrefabParentObject: {fileID: 0} 488 | m_PrefabInternal: {fileID: 0} 489 | m_GameObject: {fileID: 799225995} 490 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 491 | m_LocalPosition: {x: 0, y: 1, z: -10} 492 | m_LocalScale: {x: 1, y: 1, z: 1} 493 | m_Children: 494 | - {fileID: 1020826644} 495 | m_Father: {fileID: 0} 496 | m_RootOrder: 1 497 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 498 | --- !u!1 &1020826643 499 | GameObject: 500 | m_ObjectHideFlags: 0 501 | m_PrefabParentObject: {fileID: 0} 502 | m_PrefabInternal: {fileID: 0} 503 | serializedVersion: 5 504 | m_Component: 505 | - component: {fileID: 1020826644} 506 | - component: {fileID: 1020826645} 507 | m_Layer: 0 508 | m_Name: TestObject (1) 509 | m_TagString: Untagged 510 | m_Icon: {fileID: 0} 511 | m_NavMeshLayer: 0 512 | m_StaticEditorFlags: 0 513 | m_IsActive: 1 514 | --- !u!4 &1020826644 515 | Transform: 516 | m_ObjectHideFlags: 0 517 | m_PrefabParentObject: {fileID: 0} 518 | m_PrefabInternal: {fileID: 0} 519 | m_GameObject: {fileID: 1020826643} 520 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 521 | m_LocalPosition: {x: 0, y: -1, z: 10} 522 | m_LocalScale: {x: 1, y: 1, z: 1} 523 | m_Children: [] 524 | m_Father: {fileID: 799225999} 525 | m_RootOrder: 0 526 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 527 | --- !u!114 &1020826645 528 | MonoBehaviour: 529 | m_ObjectHideFlags: 0 530 | m_PrefabParentObject: {fileID: 0} 531 | m_PrefabInternal: {fileID: 0} 532 | m_GameObject: {fileID: 1020826643} 533 | m_Enabled: 1 534 | m_EditorHideFlags: 0 535 | m_Script: {fileID: 11500000, guid: 69bfbb65fdb39f543834aa739238a030, type: 3} 536 | m_Name: 537 | m_EditorClassIdentifier: 538 | testEvent: 539 | m_PersistentCalls: 540 | m_Calls: 541 | - m_Target: {fileID: 1020826645} 542 | m_MethodName: TestFunction 543 | m_Mode: 1 544 | m_Arguments: 545 | m_ObjectArgument: {fileID: 0} 546 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 547 | m_IntArgument: 0 548 | m_FloatArgument: 0 549 | m_StringArgument: 550 | m_BoolArgument: 0 551 | m_CallState: 2 552 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 553 | Culture=neutral, PublicKeyToken=null 554 | nestedClass: 555 | internalEventTest: 556 | m_PersistentCalls: 557 | m_Calls: 558 | - m_Target: {fileID: 1020826645} 559 | m_MethodName: TestFunction 560 | m_Mode: 1 561 | m_Arguments: 562 | m_ObjectArgument: {fileID: 0} 563 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 564 | m_IntArgument: 0 565 | m_FloatArgument: 0 566 | m_StringArgument: 567 | m_BoolArgument: 0 568 | m_CallState: 2 569 | m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, 570 | Culture=neutral, PublicKeyToken=null 571 | --- !u!1 &1139883605 572 | GameObject: 573 | m_ObjectHideFlags: 0 574 | m_PrefabParentObject: {fileID: 0} 575 | m_PrefabInternal: {fileID: 0} 576 | serializedVersion: 5 577 | m_Component: 578 | - component: {fileID: 1139883606} 579 | - component: {fileID: 1139883609} 580 | - component: {fileID: 1139883608} 581 | - component: {fileID: 1139883607} 582 | m_Layer: 5 583 | m_Name: Button 584 | m_TagString: Untagged 585 | m_Icon: {fileID: 0} 586 | m_NavMeshLayer: 0 587 | m_StaticEditorFlags: 0 588 | m_IsActive: 1 589 | --- !u!224 &1139883606 590 | RectTransform: 591 | m_ObjectHideFlags: 0 592 | m_PrefabParentObject: {fileID: 0} 593 | m_PrefabInternal: {fileID: 0} 594 | m_GameObject: {fileID: 1139883605} 595 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 596 | m_LocalPosition: {x: 0, y: 0, z: 0} 597 | m_LocalScale: {x: 1, y: 1, z: 1} 598 | m_Children: 599 | - {fileID: 1952855426} 600 | - {fileID: 765536185} 601 | m_Father: {fileID: 5829215} 602 | m_RootOrder: 0 603 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 604 | m_AnchorMin: {x: 0.5, y: 0.5} 605 | m_AnchorMax: {x: 0.5, y: 0.5} 606 | m_AnchoredPosition: {x: 0, y: 0} 607 | m_SizeDelta: {x: 160, y: 30} 608 | m_Pivot: {x: 0.5, y: 0.5} 609 | --- !u!114 &1139883607 610 | MonoBehaviour: 611 | m_ObjectHideFlags: 0 612 | m_PrefabParentObject: {fileID: 0} 613 | m_PrefabInternal: {fileID: 0} 614 | m_GameObject: {fileID: 1139883605} 615 | m_Enabled: 1 616 | m_EditorHideFlags: 0 617 | m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 618 | m_Name: 619 | m_EditorClassIdentifier: 620 | m_Navigation: 621 | m_Mode: 3 622 | m_SelectOnUp: {fileID: 0} 623 | m_SelectOnDown: {fileID: 0} 624 | m_SelectOnLeft: {fileID: 0} 625 | m_SelectOnRight: {fileID: 0} 626 | m_Transition: 1 627 | m_Colors: 628 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 629 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 630 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 631 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 632 | m_ColorMultiplier: 1 633 | m_FadeDuration: 0.1 634 | m_SpriteState: 635 | m_HighlightedSprite: {fileID: 0} 636 | m_PressedSprite: {fileID: 0} 637 | m_DisabledSprite: {fileID: 0} 638 | m_AnimationTriggers: 639 | m_NormalTrigger: Normal 640 | m_HighlightedTrigger: Highlighted 641 | m_PressedTrigger: Pressed 642 | m_DisabledTrigger: Disabled 643 | m_Interactable: 1 644 | m_TargetGraphic: {fileID: 1139883608} 645 | m_OnClick: 646 | m_PersistentCalls: 647 | m_Calls: 648 | - m_Target: {fileID: 799225996} 649 | m_MethodName: set_stereoConvergence 650 | m_Mode: 4 651 | m_Arguments: 652 | m_ObjectArgument: {fileID: 0} 653 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 654 | m_IntArgument: 0 655 | m_FloatArgument: 0 656 | m_StringArgument: 657 | m_BoolArgument: 0 658 | m_CallState: 2 659 | m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, 660 | Culture=neutral, PublicKeyToken=null 661 | --- !u!114 &1139883608 662 | MonoBehaviour: 663 | m_ObjectHideFlags: 0 664 | m_PrefabParentObject: {fileID: 0} 665 | m_PrefabInternal: {fileID: 0} 666 | m_GameObject: {fileID: 1139883605} 667 | m_Enabled: 1 668 | m_EditorHideFlags: 0 669 | m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 670 | m_Name: 671 | m_EditorClassIdentifier: 672 | m_Material: {fileID: 0} 673 | m_Color: {r: 1, g: 1, b: 1, a: 1} 674 | m_RaycastTarget: 1 675 | m_OnCullStateChanged: 676 | m_PersistentCalls: 677 | m_Calls: [] 678 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 679 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 680 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 681 | m_Type: 1 682 | m_PreserveAspect: 0 683 | m_FillCenter: 1 684 | m_FillMethod: 4 685 | m_FillAmount: 1 686 | m_FillClockwise: 1 687 | m_FillOrigin: 0 688 | --- !u!222 &1139883609 689 | CanvasRenderer: 690 | m_ObjectHideFlags: 0 691 | m_PrefabParentObject: {fileID: 0} 692 | m_PrefabInternal: {fileID: 0} 693 | m_GameObject: {fileID: 1139883605} 694 | --- !u!1 &1781322354 695 | GameObject: 696 | m_ObjectHideFlags: 0 697 | m_PrefabParentObject: {fileID: 0} 698 | m_PrefabInternal: {fileID: 0} 699 | serializedVersion: 5 700 | m_Component: 701 | - component: {fileID: 1781322355} 702 | - component: {fileID: 1781322356} 703 | m_Layer: 0 704 | m_Name: Directional Light 705 | m_TagString: Untagged 706 | m_Icon: {fileID: 0} 707 | m_NavMeshLayer: 0 708 | m_StaticEditorFlags: 0 709 | m_IsActive: 1 710 | --- !u!4 &1781322355 711 | Transform: 712 | m_ObjectHideFlags: 0 713 | m_PrefabParentObject: {fileID: 0} 714 | m_PrefabInternal: {fileID: 0} 715 | m_GameObject: {fileID: 1781322354} 716 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 717 | m_LocalPosition: {x: 0, y: 3, z: 0} 718 | m_LocalScale: {x: 1, y: 1, z: 1} 719 | m_Children: [] 720 | m_Father: {fileID: 0} 721 | m_RootOrder: 2 722 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 723 | --- !u!108 &1781322356 724 | Light: 725 | m_ObjectHideFlags: 0 726 | m_PrefabParentObject: {fileID: 0} 727 | m_PrefabInternal: {fileID: 0} 728 | m_GameObject: {fileID: 1781322354} 729 | m_Enabled: 1 730 | serializedVersion: 8 731 | m_Type: 1 732 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 733 | m_Intensity: 1 734 | m_Range: 10 735 | m_SpotAngle: 30 736 | m_CookieSize: 10 737 | m_Shadows: 738 | m_Type: 2 739 | m_Resolution: -1 740 | m_CustomResolution: -1 741 | m_Strength: 1 742 | m_Bias: 0.05 743 | m_NormalBias: 0.4 744 | m_NearPlane: 0.2 745 | m_Cookie: {fileID: 0} 746 | m_DrawHalo: 0 747 | m_Flare: {fileID: 0} 748 | m_RenderMode: 0 749 | m_CullingMask: 750 | serializedVersion: 2 751 | m_Bits: 4294967295 752 | m_Lightmapping: 4 753 | m_AreaSize: {x: 1, y: 1} 754 | m_BounceIntensity: 1 755 | m_ColorTemperature: 6570 756 | m_UseColorTemperature: 0 757 | m_ShadowRadius: 0 758 | m_ShadowAngle: 0 759 | --- !u!1 &1952855425 760 | GameObject: 761 | m_ObjectHideFlags: 0 762 | m_PrefabParentObject: {fileID: 0} 763 | m_PrefabInternal: {fileID: 0} 764 | serializedVersion: 5 765 | m_Component: 766 | - component: {fileID: 1952855426} 767 | - component: {fileID: 1952855428} 768 | - component: {fileID: 1952855427} 769 | m_Layer: 5 770 | m_Name: Text 771 | m_TagString: Untagged 772 | m_Icon: {fileID: 0} 773 | m_NavMeshLayer: 0 774 | m_StaticEditorFlags: 0 775 | m_IsActive: 1 776 | --- !u!224 &1952855426 777 | RectTransform: 778 | m_ObjectHideFlags: 0 779 | m_PrefabParentObject: {fileID: 0} 780 | m_PrefabInternal: {fileID: 0} 781 | m_GameObject: {fileID: 1952855425} 782 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 783 | m_LocalPosition: {x: 0, y: 0, z: 0} 784 | m_LocalScale: {x: 1, y: 1, z: 1} 785 | m_Children: [] 786 | m_Father: {fileID: 1139883606} 787 | m_RootOrder: 0 788 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 789 | m_AnchorMin: {x: 0, y: 0} 790 | m_AnchorMax: {x: 1, y: 1} 791 | m_AnchoredPosition: {x: 0, y: 0} 792 | m_SizeDelta: {x: 0, y: 0} 793 | m_Pivot: {x: 0.5, y: 0.5} 794 | --- !u!114 &1952855427 795 | MonoBehaviour: 796 | m_ObjectHideFlags: 0 797 | m_PrefabParentObject: {fileID: 0} 798 | m_PrefabInternal: {fileID: 0} 799 | m_GameObject: {fileID: 1952855425} 800 | m_Enabled: 1 801 | m_EditorHideFlags: 0 802 | m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 803 | m_Name: 804 | m_EditorClassIdentifier: 805 | m_Material: {fileID: 0} 806 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 807 | m_RaycastTarget: 1 808 | m_OnCullStateChanged: 809 | m_PersistentCalls: 810 | m_Calls: [] 811 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 812 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 813 | m_FontData: 814 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 815 | m_FontSize: 14 816 | m_FontStyle: 0 817 | m_BestFit: 0 818 | m_MinSize: 10 819 | m_MaxSize: 40 820 | m_Alignment: 4 821 | m_AlignByGeometry: 0 822 | m_RichText: 1 823 | m_HorizontalOverflow: 0 824 | m_VerticalOverflow: 0 825 | m_LineSpacing: 1 826 | m_Text: Button 827 | --- !u!222 &1952855428 828 | CanvasRenderer: 829 | m_ObjectHideFlags: 0 830 | m_PrefabParentObject: {fileID: 0} 831 | m_PrefabInternal: {fileID: 0} 832 | m_GameObject: {fileID: 1952855425} 833 | --- !u!1 &1996695459 834 | GameObject: 835 | m_ObjectHideFlags: 0 836 | m_PrefabParentObject: {fileID: 0} 837 | m_PrefabInternal: {fileID: 0} 838 | serializedVersion: 5 839 | m_Component: 840 | - component: {fileID: 1996695462} 841 | - component: {fileID: 1996695461} 842 | - component: {fileID: 1996695460} 843 | m_Layer: 0 844 | m_Name: EventSystem 845 | m_TagString: Untagged 846 | m_Icon: {fileID: 0} 847 | m_NavMeshLayer: 0 848 | m_StaticEditorFlags: 0 849 | m_IsActive: 1 850 | --- !u!114 &1996695460 851 | MonoBehaviour: 852 | m_ObjectHideFlags: 0 853 | m_PrefabParentObject: {fileID: 0} 854 | m_PrefabInternal: {fileID: 0} 855 | m_GameObject: {fileID: 1996695459} 856 | m_Enabled: 1 857 | m_EditorHideFlags: 0 858 | m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 859 | m_Name: 860 | m_EditorClassIdentifier: 861 | m_HorizontalAxis: Horizontal 862 | m_VerticalAxis: Vertical 863 | m_SubmitButton: Submit 864 | m_CancelButton: Cancel 865 | m_InputActionsPerSecond: 10 866 | m_RepeatDelay: 0.5 867 | m_ForceModuleActive: 0 868 | --- !u!114 &1996695461 869 | MonoBehaviour: 870 | m_ObjectHideFlags: 0 871 | m_PrefabParentObject: {fileID: 0} 872 | m_PrefabInternal: {fileID: 0} 873 | m_GameObject: {fileID: 1996695459} 874 | m_Enabled: 1 875 | m_EditorHideFlags: 0 876 | m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 877 | m_Name: 878 | m_EditorClassIdentifier: 879 | m_FirstSelected: {fileID: 0} 880 | m_sendNavigationEvents: 1 881 | m_DragThreshold: 5 882 | --- !u!4 &1996695462 883 | Transform: 884 | m_ObjectHideFlags: 0 885 | m_PrefabParentObject: {fileID: 0} 886 | m_PrefabInternal: {fileID: 0} 887 | m_GameObject: {fileID: 1996695459} 888 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 889 | m_LocalPosition: {x: 0, y: 0, z: 0} 890 | m_LocalScale: {x: 1, y: 1, z: 1} 891 | m_Children: [] 892 | m_Father: {fileID: 0} 893 | m_RootOrder: 4 894 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 895 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/TestScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f936d2d4881737c409b79e1baa7fc52b 3 | timeCreated: 1515753942 4 | licenseType: Pro 5 | DefaultImporter: 6 | externalObjects: {} 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/refseek.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: 2bcdc6922393b0442846eb98977c87ae, type: 3} 12 | m_Name: refseek 13 | m_EditorClassIdentifier: 14 | packageName: ReferenceSeeker 15 | dependenciesID: 16 | - 5e661903909feea498f833199291d65b 17 | - 1ee27f1f15c24f642a8c564ccfcc1ad9 18 | outputPath: 19 | - Assets/EventReferenceSeeker/Plugin/YamlDotNet.dll 20 | - Assets/EventReferenceSeeker/Editor/ReferenceFinder.cs 21 | -------------------------------------------------------------------------------- /Assets/EventReferenceSeeker/refseek.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0ae338c39e182e249a2c078e7d18c073 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 00022fc1de47d444ea071721d9a42021 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf3141c039e812149894b55e4fd6191f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder/Editor/FindMissingScripts.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | using UnityEngine.SceneManagement; 6 | 7 | public class FindMissingScripts: EditorWindow 8 | { 9 | [MenuItem("Content Extensions/Find Missing Component")] 10 | static public void FindMissing() 11 | { 12 | GetWindow(); 13 | } 14 | 15 | protected List _objectWithMissingScripts; 16 | protected Vector2 _scrollPosition; 17 | 18 | private void OnEnable() 19 | { 20 | _objectWithMissingScripts = new List(); 21 | _scrollPosition = Vector2.zero; 22 | } 23 | 24 | private void OnGUI() 25 | { 26 | EditorGUILayout.BeginHorizontal(); 27 | if (GUILayout.Button("Find in Assets")) 28 | FindInAssets(); 29 | if (GUILayout.Button("Find in Current Scene")) 30 | FindInScenes(); 31 | EditorGUILayout.EndHorizontal(); 32 | 33 | _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); 34 | 35 | for (int i = 0; i < _objectWithMissingScripts.Count; ++i) 36 | { 37 | if (GUILayout.Button(_objectWithMissingScripts[i].name)) 38 | { 39 | EditorGUIUtility.PingObject(_objectWithMissingScripts[i]); 40 | } 41 | } 42 | 43 | EditorGUILayout.EndScrollView(); 44 | } 45 | 46 | void FindInAssets() 47 | { 48 | var assetGUIDs = AssetDatabase.FindAssets("t:GameObject"); 49 | _objectWithMissingScripts.Clear(); 50 | 51 | Debug.Log("Testing " + assetGUIDs.Length + " GameObject in Assets"); 52 | 53 | foreach (string assetGuiD in assetGUIDs) 54 | { 55 | GameObject obj = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(assetGuiD)); 56 | 57 | RecursiveDepthSearch(obj); 58 | } 59 | } 60 | 61 | void RecursiveDepthSearch(GameObject root) 62 | { 63 | Component[] components = root.GetComponents(); 64 | foreach (Component c in components) 65 | { 66 | if (c == null) 67 | { 68 | if (!_objectWithMissingScripts.Contains(root)) 69 | _objectWithMissingScripts.Add(root); 70 | } 71 | } 72 | 73 | foreach (Transform t in root.transform) 74 | { 75 | RecursiveDepthSearch(t.gameObject); 76 | } 77 | } 78 | 79 | void FindInScenes() 80 | { 81 | _objectWithMissingScripts.Clear(); 82 | 83 | for(int i= 0; i < SceneManager.sceneCount; ++i) 84 | { 85 | var rootGOs = SceneManager.GetSceneAt(i).GetRootGameObjects(); 86 | 87 | Debug.Log("Testing " + rootGOs.Length + " Gameobjects in scene " + i); 88 | 89 | foreach (GameObject obj in rootGOs) 90 | { 91 | RecursiveDepthSearch(obj); 92 | } 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder/Editor/FindMissingScripts.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4afebfebff2316646aab4069c4cee7f9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder/MissingScript.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: 2bcdc6922393b0442846eb98977c87ae, type: 3} 12 | m_Name: MissingScript 13 | m_EditorClassIdentifier: 14 | packageName: Package 15 | dependenciesID: [] 16 | outputPath: [] 17 | -------------------------------------------------------------------------------- /Assets/MissingScriptFinder/MissingScript.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78c000d5f09e5fa4cabc0e0c71f1ee1c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PackageDesigner.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4d1002d7e3a98d3408ee768da3b3f485 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 20429099a8ab4f04a8b51f823786efdb 3 | folderAsset: yes 4 | timeCreated: 1493392035 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/Editor/AssetPackage.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | 6 | public class AssetPackage : ScriptableObject 7 | { 8 | public string packageName = "Package"; 9 | public string[] dependenciesID = new string[0]; 10 | public string[] outputPath = new string[0]; 11 | 12 | 13 | //This is costly and create garbage, but it is also easy, so call with parcimony 14 | public string[] dependencies 15 | { 16 | get 17 | { 18 | string[] dep = new string[dependenciesID.Length]; 19 | for (int i = 0; i < dep.Length; ++i) 20 | dep[i] = AssetDatabase.GUIDToAssetPath(dependenciesID[i]); 21 | 22 | return dep; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/Editor/AssetPackage.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2bcdc6922393b0442846eb98977c87ae 3 | timeCreated: 1493370930 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/Editor/PackageDesigner.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | using UnityEditor.IMGUI.Controls; 6 | using Microsoft.CSharp; 7 | using System.CodeDom.Compiler; 8 | using System.Security.Policy; 9 | using System.Text; 10 | 11 | public class PackageDesigner : EditorWindow 12 | { 13 | public List nonCompilingFiles { get { return m_NonCompilingScriptFiles; } } 14 | public AssetPackage currentlyEdited { get { return m_CurrentlyEdited; } } 15 | 16 | AssetPackage[] m_AssetPackageList; 17 | Vector2 m_PackageListScrollPos; 18 | 19 | AssetPackage m_CurrentlyEdited = null; 20 | 21 | DependencyTreeView m_AssetPreviewTree; 22 | TreeViewState m_tvstate; 23 | 24 | DependencyTreeView m_ReorgTreeView; 25 | TreeViewState m_reorgstate; 26 | 27 | string m_PackageCompileError; 28 | List m_NonCompilingScriptFiles = new List(); 29 | Vector2 m_ErroDisplayScroll; 30 | 31 | //this will be set to true by the command line version so it close the editor once all command are done. 32 | private bool m_CloseOnFinishExport = false; 33 | 34 | public class ExportTask 35 | { 36 | public string destination; 37 | public AssetPackage package; 38 | public bool copied = false; 39 | 40 | public string[] oldPathSaved; 41 | public string[] newPathSaved; 42 | 43 | public string exportTemp; 44 | public string movePath; 45 | } 46 | 47 | private Queue m_ToExport = new Queue(); 48 | 49 | [MenuItem("Content Extensions/PackageDesigner")] 50 | static void Open() 51 | { 52 | GetWindow(); 53 | } 54 | 55 | private void OnFocus() 56 | { 57 | PopulateTreeview(); 58 | } 59 | 60 | private void OnEnable() 61 | { 62 | GetAllPackageList(); 63 | 64 | m_tvstate = new TreeViewState(); 65 | m_AssetPreviewTree = new DependencyTreeView(m_tvstate); 66 | m_AssetPreviewTree.designer = this; 67 | m_AssetPreviewTree.isPreview = true; 68 | 69 | m_reorgstate = new TreeViewState(); 70 | m_ReorgTreeView = new DependencyTreeView(m_reorgstate); 71 | m_ReorgTreeView.designer = this; 72 | m_ReorgTreeView.isPreview = false; 73 | 74 | Undo.undoRedoPerformed += UndoPerformed; 75 | 76 | PopulateTreeview(); 77 | } 78 | 79 | private void OnDisable() 80 | { 81 | Undo.undoRedoPerformed -= UndoPerformed; 82 | 83 | //we unlock here mainly useful during dev: if an exception is thrown during the export, function exit without 84 | //unlocking assembly reload, so as a failsafe we make sure to unlock when window is closed. 85 | EditorApplication.UnlockReloadAssemblies(); 86 | } 87 | 88 | private void Update() 89 | { 90 | if (m_ToExport.Count > 0) 91 | { 92 | ExportTask task = m_ToExport.Peek(); 93 | if (!task.copied) 94 | {//no yet copied over to a temp folder for export 95 | //First move all into a temp folder for export 96 | task.oldPathSaved = new string[task.package.dependencies.Length]; 97 | task.newPathSaved = new string[task.package.dependencies.Length]; 98 | task.exportTemp = Application.dataPath + "/" + task.package.packageName + "_Export"; 99 | task.movePath = task.exportTemp.Replace(Application.dataPath, "Assets"); 100 | System.IO.Directory.CreateDirectory(task.exportTemp); 101 | 102 | for (int i = 0; i < task.package.dependenciesID.Length; ++i) 103 | { 104 | string destPath = task.package.outputPath[i].Replace("Assets", task.movePath); 105 | string directorypath = destPath.Replace("Assets", Application.dataPath); 106 | System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(directorypath)); 107 | } 108 | 109 | AssetDatabase.Refresh(); 110 | 111 | for (int i = 0; i < task.package.dependenciesID.Length; ++i) 112 | { 113 | string path = AssetDatabase.GUIDToAssetPath(task.package.dependenciesID[i]); 114 | task.oldPathSaved[i] = path; 115 | string destPath = task.package.outputPath[i].Replace("Assets", task.movePath); 116 | task.newPathSaved[i] = destPath; 117 | 118 | AssetDatabase.MoveAsset(path, destPath); 119 | } 120 | 121 | AssetDatabase.Refresh(); 122 | 123 | task.copied = true; 124 | } 125 | else 126 | {//was copied now need to export then clean & remove from the queue 127 | 128 | Debug.Log("Exporting and cleaning"); 129 | AssetDatabase.ExportPackage(task.movePath, task.destination, ExportPackageOptions.Recurse); 130 | 131 | for (int i = 0; i < task.oldPathSaved.Length; ++i) 132 | { 133 | AssetDatabase.MoveAsset(task.newPathSaved[i], task.oldPathSaved[i]); 134 | } 135 | 136 | FileUtil.DeleteFileOrDirectory(task.exportTemp); 137 | 138 | AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); 139 | 140 | m_ToExport.Dequeue(); 141 | } 142 | } 143 | else if(m_CloseOnFinishExport) 144 | EditorApplication.Exit(0); 145 | } 146 | 147 | void UndoPerformed() 148 | { 149 | PopulateTreeview(); 150 | } 151 | 152 | private void OnGUI() 153 | { 154 | if (m_ToExport.Count > 0) 155 | { 156 | EditorUtility.DisplayProgressBar("Exporting package...", "Exporting package", 0.5f); 157 | } 158 | else 159 | { 160 | EditorUtility.ClearProgressBar(); 161 | } 162 | 163 | if (GUILayout.Button("Export All Package")) 164 | { 165 | ExportAll(); 166 | } 167 | EditorGUILayout.BeginHorizontal(); 168 | EditorGUILayout.BeginVertical(GUILayout.Width(128)); 169 | if(GUILayout.Button("New...")) 170 | { 171 | string savePath = EditorUtility.SaveFilePanelInProject("Save package file", "package", "asset", "Save package"); 172 | if(savePath != "") 173 | { 174 | AssetPackage package = CreateInstance(); 175 | AssetDatabase.CreateAsset(package, savePath.Replace(Application.dataPath, "Assets")); 176 | m_CurrentlyEdited = package; 177 | ArrayUtility.Add(ref m_AssetPackageList, package); 178 | AssetDatabase.Refresh(); 179 | } 180 | } 181 | 182 | m_PackageListScrollPos = EditorGUILayout.BeginScrollView(m_PackageListScrollPos, "box"); 183 | 184 | for (int i = 0; i < m_AssetPackageList.Length; ++i) 185 | { 186 | if (m_AssetPackageList[i] != m_CurrentlyEdited) 187 | { 188 | if (GUILayout.Button(m_AssetPackageList[i].packageName)) 189 | { 190 | m_CurrentlyEdited = m_AssetPackageList[i]; 191 | PopulateTreeview(); 192 | } 193 | } 194 | else 195 | { 196 | GUILayout.Label(m_AssetPackageList[i].packageName); 197 | } 198 | } 199 | EditorGUILayout.EndScrollView(); 200 | EditorGUILayout.EndVertical(); 201 | 202 | if (m_CurrentlyEdited != null) 203 | EditedUI(); 204 | 205 | EditorGUILayout.EndHorizontal(); 206 | } 207 | 208 | void ExportCurrentPackage(string saveTo = "") 209 | { 210 | if(saveTo == "") 211 | saveTo = EditorUtility.SaveFilePanel("Export package", Application.dataPath.Replace("/Assets", ""), m_CurrentlyEdited.packageName, "unitypackage"); 212 | 213 | //Still didnt' give a valid path or canceled, exit 214 | if (saveTo == "") 215 | return; 216 | 217 | ExportTask task = new ExportTask 218 | { 219 | destination = saveTo, 220 | package = m_CurrentlyEdited 221 | }; 222 | 223 | m_ToExport.Enqueue(task); 224 | } 225 | 226 | void ExportAll(string saveFolder = "") 227 | { 228 | if (saveFolder == "") 229 | saveFolder = EditorUtility.SaveFolderPanel("Choose output Folder", Application.dataPath.Replace("/Assets", ""), "Package Ouput"); 230 | 231 | if (saveFolder == "") 232 | return; 233 | 234 | Debug.LogFormat("Export all package : {0} package to export", m_AssetPackageList.Length); 235 | 236 | AssetPackage current = m_CurrentlyEdited; 237 | for(int i = 0; i < m_AssetPackageList.Length; ++i) 238 | { 239 | m_CurrentlyEdited = m_AssetPackageList[i]; 240 | ExportCurrentPackage(saveFolder + "/" + m_CurrentlyEdited.packageName + ".unitypackage"); 241 | } 242 | m_CurrentlyEdited = current; 243 | 244 | } 245 | 246 | static void CommandLineExportAllPackage() 247 | { 248 | PackageDesigner designer = GetWindow(); 249 | 250 | string[] commandLineArgument = System.Environment.GetCommandLineArgs(); 251 | int index = System.Array.IndexOf(commandLineArgument, "PackageDesigner.CommandLineExportAllPackage"); 252 | 253 | if (index < 0 || index + 1 >= commandLineArgument.Length || !System.IO.Directory.Exists(commandLineArgument[index+1])) 254 | { 255 | Debug.LogError("Specify a path to export the packages to! (place the path after -executeMethod PackageDesigner.CommandLineExportAllPackage \"your path here\")"); 256 | EditorApplication.Exit(12); 257 | } 258 | 259 | designer.ExportAll(commandLineArgument[index + 1]); 260 | designer.m_CloseOnFinishExport = true; 261 | } 262 | 263 | void EditedUI() 264 | { 265 | EditorGUILayout.BeginVertical(); 266 | EditorGUILayout.BeginVertical(); 267 | 268 | if (m_PackageCompileError != "") 269 | { 270 | m_ErroDisplayScroll = EditorGUILayout.BeginScrollView(m_ErroDisplayScroll, GUILayout.Height(64)); 271 | EditorGUILayout.HelpBox(m_PackageCompileError, MessageType.Error); 272 | EditorGUILayout.EndScrollView(); 273 | } 274 | 275 | EditorGUILayout.BeginHorizontal(); 276 | string packageName = EditorGUILayout.DelayedTextField("Package Name", m_CurrentlyEdited.packageName); 277 | if(packageName != m_CurrentlyEdited.packageName) 278 | { 279 | Undo.RecordObject(m_CurrentlyEdited, "Renamed package"); 280 | m_CurrentlyEdited.packageName = packageName; 281 | } 282 | 283 | 284 | if(GUILayout.Button("Export ...")) 285 | { 286 | ExportCurrentPackage(); 287 | } 288 | EditorGUILayout.EndHorizontal(); 289 | 290 | EditorGUILayout.EndVertical(); 291 | 292 | EditorGUILayout.BeginHorizontal(); 293 | EditorGUILayout.BeginVertical("box"); 294 | 295 | EditorGUILayout.LabelField("ASSETS LIST", GUILayout.ExpandHeight(true)); 296 | 297 | EditorGUILayout.EndVertical(); 298 | Rect r = GUILayoutUtility.GetLastRect(); 299 | r.y += EditorGUIUtility.singleLineHeight; 300 | r.height -= EditorGUIUtility.singleLineHeight * 1.5f; 301 | m_AssetPreviewTree.OnGUI(r); 302 | 303 | EditorGUILayout.BeginVertical("box"); 304 | EditorGUILayout.LabelField("OUTPUT", GUILayout.ExpandHeight(true)); 305 | EditorGUILayout.EndVertical(); 306 | r = GUILayoutUtility.GetLastRect(); 307 | r.y += EditorGUIUtility.singleLineHeight; 308 | r.height -= EditorGUIUtility.singleLineHeight * 1.5f; 309 | m_ReorgTreeView.OnGUI(r); 310 | 311 | EditorGUILayout.EndHorizontal(); 312 | 313 | if (m_AssetPreviewTree.assetPreviews != null && m_AssetPreviewTree.assetPreviews.Length > 0) 314 | { 315 | EditorGUILayout.BeginHorizontal("box", GUILayout.Height(128.0f)); 316 | if (m_AssetPreviewTree.assetPreviews != null) 317 | { 318 | for (int i = 0; i < m_AssetPreviewTree.assetPreviews.Length; ++i) 319 | { 320 | EditorGUILayout.LabelField(m_AssetPreviewTree.assetPreviews[i], GUILayout.Height(128.0f)); 321 | } 322 | } 323 | GUILayout.FlexibleSpace(); 324 | EditorGUILayout.EndHorizontal(); 325 | } 326 | 327 | EditorGUILayout.EndVertical(); 328 | } 329 | 330 | public void GetAllAssetsDependency(Object[] objs) 331 | { 332 | Undo.RecordObject(m_CurrentlyEdited, "Dependencies added"); 333 | if(m_CurrentlyEdited.dependenciesID == null) 334 | m_CurrentlyEdited.dependenciesID = new string[0]; 335 | 336 | for(int i = 0; i < objs.Length; ++i) 337 | { 338 | string[] str = AssetDatabase.GetDependencies(AssetDatabase.GetAssetPath(objs[i])); 339 | 340 | for (int j = 0; j < str.Length; ++j) 341 | { 342 | string depID = AssetDatabase.AssetPathToGUID(str[j]); 343 | if (!ArrayUtility.Contains(m_CurrentlyEdited.dependenciesID, depID)) 344 | { 345 | ArrayUtility.Add(ref m_CurrentlyEdited.dependenciesID, depID); 346 | ArrayUtility.Add(ref m_CurrentlyEdited.outputPath, AssetDatabase.GUIDToAssetPath(depID)); 347 | } 348 | } 349 | } 350 | 351 | EditorUtility.SetDirty(m_CurrentlyEdited); 352 | 353 | PopulateTreeview(); 354 | } 355 | 356 | public void PopulateTreeview() 357 | { 358 | m_PackageCompileError = ""; 359 | m_ErroDisplayScroll = Vector2.zero; 360 | 361 | if (m_CurrentlyEdited == null) 362 | return; 363 | 364 | string[] files = new string[0]; 365 | string[] depPath = m_CurrentlyEdited.dependencies; 366 | for (int i = 0; i < depPath.Length; ++i) 367 | { 368 | if(AssetDatabase.GetMainAssetTypeAtPath(depPath[i]) == typeof(MonoScript)) 369 | { 370 | ArrayUtility.Add(ref files, depPath[i].Replace("Assets", Application.dataPath)); 371 | } 372 | } 373 | 374 | if(files.Length != 0) 375 | { 376 | CheckCanCompile(files); 377 | } 378 | 379 | 380 | m_AssetPreviewTree.assetPackage = m_CurrentlyEdited; 381 | m_AssetPreviewTree.Reload(); 382 | m_AssetPreviewTree.ExpandAll(); 383 | 384 | m_ReorgTreeView.assetPackage = m_CurrentlyEdited; 385 | m_ReorgTreeView.Reload(); 386 | m_ReorgTreeView.ExpandAll(); 387 | } 388 | 389 | void GetAllPackageList() 390 | { 391 | string[] assets = AssetDatabase.FindAssets("t:AssetPackage"); 392 | m_AssetPackageList = new AssetPackage[assets.Length]; 393 | 394 | for(int i = 0; i < assets.Length; ++i) 395 | { 396 | m_AssetPackageList[i] = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(assets[i])); 397 | } 398 | } 399 | 400 | void CheckCanCompile(string[] files) 401 | { 402 | m_NonCompilingScriptFiles.Clear(); 403 | CSharpCodeProvider provider = new CSharpCodeProvider(); 404 | CompilerParameters parameters = new CompilerParameters(); 405 | 406 | foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) 407 | { 408 | if (assembly.Location.Contains("Library")) 409 | continue;//we don't add the library specific to the project, as we want to test compilign for any project 410 | parameters.ReferencedAssemblies.Add(assembly.Location); 411 | } 412 | 413 | parameters.GenerateInMemory = true; 414 | parameters.GenerateExecutable = false; 415 | 416 | CompilerResults results = provider.CompileAssemblyFromFile(parameters, files); 417 | 418 | if (results.Errors.HasErrors) 419 | { 420 | StringBuilder sb = new StringBuilder(); 421 | 422 | foreach (CompilerError error in results.Errors) 423 | { 424 | sb.AppendLine(string.Format("Error in {0} : {1}", error.FileName, error.ErrorText)); 425 | m_NonCompilingScriptFiles.Add(error.FileName.Replace(Application.dataPath, "Assets")); 426 | } 427 | 428 | 429 | m_PackageCompileError = sb.ToString(); 430 | } 431 | } 432 | } 433 | 434 | 435 | public class DependencyTreeView : TreeView 436 | { 437 | public AssetPackage assetPackage = null; 438 | public PackageDesigner designer = null; 439 | public GUIContent[] assetPreviews = null; 440 | 441 | //preview tree just list asset inside the package, they allow deleting stuff (remove from package). 442 | //non preview tree are the one use to reorganize the assets. they don't allow deleting, but allow creating empty folder/move things around 443 | public bool isPreview = false; 444 | 445 | protected Texture2D m_FolderIcone; 446 | //TODO replace that with proper id handling, reusing etc. For now simple increment will be enough 447 | protected int freeID = 0; 448 | 449 | protected GenericMenu m_contextMenu; 450 | 451 | public DependencyTreeView(TreeViewState state) : base(state) 452 | { 453 | m_FolderIcone = EditorGUIUtility.Load("Folder Icon.asset") as Texture2D; 454 | freeID = 0; 455 | } 456 | 457 | protected override TreeViewItem BuildRoot() 458 | { 459 | TreeViewItem item = new TreeViewItem(); 460 | item.depth = -1; 461 | 462 | if (assetPackage == null || assetPackage.dependenciesID == null || assetPackage.dependenciesID.Length == 0) 463 | { 464 | TreeViewItem itm = new TreeViewItem(freeID, 0, "Nothing"); 465 | item.AddChild(itm); 466 | return item; 467 | } 468 | 469 | for(int i = 0; i < assetPackage.dependenciesID.Length; ++i) 470 | { 471 | string path, assetpath; 472 | 473 | assetpath = AssetDatabase.GUIDToAssetPath(assetPackage.dependenciesID[i]); 474 | if (isPreview) 475 | { 476 | path = assetpath; 477 | } 478 | else 479 | path = assetPackage.outputPath[i]; 480 | 481 | RecursiveAdd(item, path, assetpath, i); 482 | } 483 | 484 | SetupDepthsFromParentsAndChildren(item); 485 | return item; 486 | } 487 | 488 | void RecursiveAdd(TreeViewItem root, string value, string fullPath, int dependencyIdx) 489 | { 490 | int idx = value.IndexOf('/'); 491 | 492 | if (idx > 0) 493 | { 494 | string node = value.Substring(0, idx); 495 | string childValue = value.Substring(idx+1); 496 | 497 | if (root.hasChildren) 498 | { 499 | for (int i = 0; i < root.children.Count; ++i) 500 | { 501 | if (root.children[i].displayName == node) 502 | { 503 | RecursiveAdd(root.children[i], childValue, fullPath, dependencyIdx); 504 | return; 505 | } 506 | } 507 | } 508 | 509 | //we didn't find a children named that way, so create a new one 510 | TreeViewItem itm = new TreeViewItem(freeID); 511 | freeID += 1; 512 | itm.displayName = node; 513 | itm.icon = m_FolderIcone; 514 | root.AddChild(itm); 515 | RecursiveAdd(itm, childValue, fullPath, dependencyIdx); 516 | } 517 | else 518 | {//this is a leaf node, just create a new one and add it to the root 519 | AssetTreeViewItem itm = new AssetTreeViewItem(freeID); 520 | freeID += 1; 521 | 522 | itm.displayName = value; 523 | itm.fullAssetPath = fullPath; 524 | itm.dependencyIdx = dependencyIdx; 525 | Object obj = AssetDatabase.LoadAssetAtPath(fullPath, typeof(UnityEngine.Object)); 526 | itm.icon = AssetPreview.GetMiniThumbnail(obj); 527 | 528 | root.AddChild(itm); 529 | } 530 | } 531 | 532 | protected override void SelectionChanged(IList selectedIds) 533 | { 534 | base.SelectionChanged(selectedIds); 535 | 536 | assetPreviews = new GUIContent[0]; 537 | 538 | IList items = FindRows(selectedIds); 539 | 540 | for(int i = 0; i < items.Count; ++i) 541 | { 542 | if(!items[i].hasChildren) 543 | { 544 | AssetTreeViewItem itm = items[i] as AssetTreeViewItem; 545 | if(itm != null) 546 | { 547 | GUIContent content = new GUIContent(AssetPreview.GetAssetPreview(AssetDatabase.LoadAssetAtPath(itm.fullAssetPath, typeof(Object)))); 548 | ArrayUtility.Add(ref assetPreviews, content); 549 | } 550 | } 551 | } 552 | } 553 | 554 | protected override void ContextClickedItem(int id) 555 | { 556 | base.ContextClickedItem(id); 557 | 558 | if (isPreview) 559 | return;//preview tree have no context click 560 | 561 | TreeViewItem itm = FindItem(id, rootItem); 562 | 563 | if (itm is AssetTreeViewItem) 564 | return; //we can only context click folder, not assets 565 | 566 | m_contextMenu = new GenericMenu(); 567 | m_contextMenu.AddItem(new GUIContent("New Folder"), false, CreateFolderContext, itm); 568 | m_contextMenu.ShowAsContext(); 569 | } 570 | 571 | protected void CreateFolderContext(object item) 572 | { 573 | TreeViewItem root = item as TreeViewItem; 574 | TreeViewItem itm = new TreeViewItem(freeID); 575 | freeID += 1; 576 | itm.displayName = "Folder"; 577 | itm.icon = m_FolderIcone; 578 | root.AddChild(itm); 579 | 580 | SetupDepthsFromParentsAndChildren(root); 581 | SetExpanded(itm.id, true); 582 | } 583 | 584 | protected override void CommandEventHandling() 585 | { 586 | base.CommandEventHandling(); 587 | 588 | if(Event.current.commandName.Contains("Delete")) 589 | { 590 | IList items = FindRows(GetSelection()); 591 | bool haveDelete = false; 592 | 593 | Undo.RecordObject(assetPackage, "Delete dependency"); 594 | for (int i = 0; i < items.Count; ++i) 595 | { 596 | RecursiveDelete(items[i], ref haveDelete); 597 | } 598 | 599 | if (haveDelete) 600 | { 601 | DesignerReloadTrees(); 602 | } 603 | } 604 | } 605 | 606 | void RecursiveDelete(TreeViewItem item, ref bool haveDelete) 607 | { 608 | if (!item.hasChildren) 609 | { 610 | AssetTreeViewItem itm = item as AssetTreeViewItem; 611 | if (itm != null) 612 | { 613 | if (!haveDelete) 614 | { 615 | haveDelete = true; 616 | } 617 | 618 | string guid = AssetDatabase.AssetPathToGUID(itm.fullAssetPath); 619 | int idx = ArrayUtility.FindIndex(assetPackage.dependenciesID, x => x == guid); 620 | 621 | if (idx != -1) 622 | { 623 | ArrayUtility.RemoveAt(ref assetPackage.dependenciesID, idx); 624 | ArrayUtility.RemoveAt(ref assetPackage.outputPath, idx); 625 | } 626 | 627 | EditorUtility.SetDirty(assetPackage); 628 | } 629 | } 630 | else 631 | { 632 | for (int j = 0; j < item.children.Count; ++j) 633 | { 634 | RecursiveDelete(item.children[j], ref haveDelete); 635 | } 636 | } 637 | } 638 | 639 | protected override void RowGUI(RowGUIArgs args) 640 | { 641 | GUI.color = Color.white; 642 | 643 | if (args.item.hasChildren == false) 644 | { 645 | AssetTreeViewItem itm = args.item as AssetTreeViewItem; 646 | if (itm != null) 647 | { 648 | if(designer.nonCompilingFiles.Contains(itm.fullAssetPath)) 649 | { 650 | GUI.color = Color.red; 651 | } 652 | } 653 | } 654 | 655 | base.RowGUI(args); 656 | } 657 | 658 | //protected override 659 | 660 | protected override bool CanRename(TreeViewItem item) 661 | { 662 | if (item is AssetTreeViewItem) 663 | return false; 664 | 665 | return true; 666 | } 667 | 668 | protected override void RenameEnded(RenameEndedArgs args) 669 | { 670 | TreeViewItem item = FindItem(args.itemID, rootItem); 671 | 672 | item.displayName = args.newName; 673 | 674 | TriggerRename(item); 675 | 676 | args.acceptedRename = true; 677 | } 678 | 679 | protected override bool CanStartDrag(CanStartDragArgs args) 680 | { 681 | return !isPreview; 682 | } 683 | 684 | protected override void SetupDragAndDrop(SetupDragAndDropArgs args) 685 | { 686 | base.SetupDragAndDrop(args); 687 | 688 | m_Dragged.Clear(); 689 | m_Dragged.AddRange(args.draggedItemIDs); 690 | 691 | DragAndDrop.objectReferences = new Object[0]; 692 | DragAndDrop.PrepareStartDrag(); 693 | DragAndDrop.StartDrag("Item view"); 694 | //DragAndDrop.visualMode = DragAndDropVisualMode.Move; 695 | } 696 | 697 | List m_Dragged = new List(); 698 | protected override DragAndDropVisualMode HandleDragAndDrop(DragAndDropArgs args) 699 | { 700 | if (args.dragAndDropPosition == DragAndDropPosition.OutsideItems) 701 | return DragAndDropVisualMode.Rejected; 702 | 703 | if(args.performDrop) 704 | { 705 | if (DragAndDrop.objectReferences.Length > 0) 706 | {//this is dropping asset into tree 707 | if (!isPreview) 708 | return DragAndDropVisualMode.Rejected; //can only drop asset in the file list, not the folder structure 709 | 710 | designer.GetAllAssetsDependency(DragAndDrop.objectReferences); 711 | } 712 | else 713 | {//this is dropping item from tree 714 | TreeViewItem dropTarget = args.parentItem; 715 | 716 | if (dropTarget is AssetTreeViewItem) 717 | return DragAndDropVisualMode.Rejected; 718 | 719 | 720 | for (int i = 0; i < m_Dragged.Count; ++i) 721 | { 722 | TreeViewItem itm = FindItem(m_Dragged[i], rootItem); 723 | AssetTreeViewItem assetItem = itm as AssetTreeViewItem; 724 | 725 | if (assetItem != null) 726 | { 727 | string filename = System.IO.Path.GetFileName(assetItem.fullAssetPath); 728 | string newFilename = GetFullPath(dropTarget) + "/" + filename; 729 | 730 | designer.currentlyEdited.outputPath[assetItem.dependencyIdx] = newFilename; 731 | } 732 | else 733 | { 734 | string originPath = GetFullPath(itm.parent); 735 | string targetPath = GetFullPath(dropTarget); 736 | 737 | for (int j = 0; j < itm.children.Count; ++j) 738 | { 739 | ReparentAssets(itm.children[j], originPath, targetPath); 740 | } 741 | 742 | } 743 | } 744 | 745 | designer.PopulateTreeview(); 746 | } 747 | } 748 | 749 | return DragAndDropVisualMode.Move; 750 | } 751 | 752 | string GetFullPath(TreeViewItem item) 753 | { 754 | if (item.parent == null || item.parent == rootItem) 755 | return item.displayName; 756 | 757 | return GetFullPath(item.parent) + "/" + item.displayName; 758 | } 759 | 760 | //this is to reimplify rename, it's easier to descend to each children and set their output path to the GetFullPath... 761 | void TriggerRename(TreeViewItem item) 762 | { 763 | if(item.hasChildren) 764 | { 765 | for (int i = 0; i < item.children.Count; ++i) 766 | TriggerRename(item.children[i]); 767 | } 768 | else 769 | { 770 | AssetTreeViewItem assetItem = item as AssetTreeViewItem; 771 | if(assetItem != null) 772 | { 773 | string p = GetFullPath(item); 774 | 775 | designer.currentlyEdited.outputPath[assetItem.dependencyIdx] = p; 776 | } 777 | } 778 | } 779 | 780 | void ReparentAssets(TreeViewItem item, string rootPath, string newPath) 781 | { 782 | if (item.hasChildren) 783 | { 784 | for (int i = 0; i < item.children.Count; ++i) 785 | ReparentAssets(item.children[i], rootPath, newPath); 786 | } 787 | else 788 | { 789 | AssetTreeViewItem assetTreeItem = item as AssetTreeViewItem; 790 | if (assetTreeItem == null) 791 | return; 792 | 793 | string path = GetFullPath(assetTreeItem); 794 | path = path.Replace(rootPath, newPath); 795 | designer.currentlyEdited.outputPath[assetTreeItem.dependencyIdx] = path; 796 | } 797 | } 798 | 799 | void DesignerReloadTrees() 800 | { 801 | designer.PopulateTreeview(); 802 | } 803 | } 804 | 805 | public class AssetTreeViewItem : TreeViewItem 806 | { 807 | public string fullAssetPath = ""; 808 | public int dependencyIdx = -1; 809 | 810 | public AssetTreeViewItem(int id) : base(id) { } 811 | } -------------------------------------------------------------------------------- /Assets/PackageDesigner/Editor/PackageDesigner.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ce3a76af0330ff4191067f4d9a93782 3 | timeCreated: 1493370259 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/packagedesignerpackage.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: 2bcdc6922393b0442846eb98977c87ae, type: 3} 12 | m_Name: packagedesignerpackage 13 | m_EditorClassIdentifier: 14 | packageName: Package Designer 15 | dependenciesID: 16 | - 2bcdc6922393b0442846eb98977c87ae 17 | - 4ce3a76af0330ff4191067f4d9a93782 18 | outputPath: 19 | - Assets/PackageDesigner/Editor/AssetPackage.cs 20 | - Assets/PackageDesigner/Editor/PackageDesigner.cs 21 | -------------------------------------------------------------------------------- /Assets/PackageDesigner/packagedesignerpackage.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 781fe0e42a5b01444a9a8bd3e45a86c8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3cdb8b165a5248245a8b5d31193e0dcc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/PackageManagerChecker.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Collections.Generic; 3 | using UnityEditor; 4 | using UnityEngine; 5 | using UnityEditor.PackageManager; 6 | using UnityEditor.PackageManager.Requests; 7 | using UnityEditor.Compilation; 8 | 9 | public class PackageChecker 10 | { 11 | private static AddRequest addRequest; 12 | private static ListRequest listRequest; 13 | private static Stack missingPackages = new Stack(); 14 | 15 | public class PackageEntry 16 | { 17 | public string name; 18 | public string version; 19 | } 20 | 21 | private static List packageToAdd; 22 | 23 | [InitializeOnLoadMethod] 24 | static void CheckPackage() 25 | { 26 | string filePath = Application.dataPath + "/../Library/PackageChecked"; 27 | 28 | if (!File.Exists(filePath)) 29 | { 30 | Debug.Log("[Auto Package] : Checking if required packages are included"); 31 | 32 | var packageListFile = Directory.GetFiles(Application.dataPath, "PackageImportList.txt", SearchOption.AllDirectories); 33 | if (packageListFile.Length == 0) 34 | { 35 | Debug.LogError("[Auto Package] : Couldn't find the packages list. Be sure there is a file called PackageImportList in your project"); 36 | } 37 | else 38 | { 39 | string packageListPath = packageListFile[0]; 40 | packageToAdd = new List(); 41 | string[] content = File.ReadAllLines(packageListPath); 42 | foreach (var line in content) 43 | { 44 | var split = line.Split('@'); 45 | PackageEntry entry = new PackageEntry(); 46 | 47 | entry.name = split[0]; 48 | entry.version = split.Length > 1 ? split[1] : null; 49 | 50 | packageToAdd.Add(entry); 51 | } 52 | 53 | File.WriteAllText(filePath, "Delete this to trigger a new auto package check"); 54 | listRequest = Client.List(); 55 | EditorApplication.update += Update; 56 | } 57 | } 58 | } 59 | 60 | static void Update() 61 | { 62 | if (listRequest != null) 63 | { 64 | if (listRequest.IsCompleted) 65 | { 66 | bool[] foundPackages = new bool[packageToAdd.Count]; 67 | 68 | for (int i = 0; i < foundPackages.Length; ++i) 69 | foundPackages[i] = false; 70 | 71 | foreach (var package in listRequest.Result) 72 | { 73 | for (int i = 0; i < foundPackages.Length; ++i) 74 | { 75 | if (package.packageId.Contains(packageToAdd[i].name)) 76 | { 77 | foundPackages[i] = true; 78 | Debug.Log("[Auto package] Package " + packageToAdd[i].name + " already imported in that project"); 79 | } 80 | } 81 | } 82 | 83 | for (int i = 0; i < foundPackages.Length; ++i) 84 | { 85 | if (!foundPackages[i]) 86 | missingPackages.Push(i); 87 | } 88 | 89 | listRequest = null; 90 | } 91 | else if (listRequest.Error != null) 92 | { 93 | Debug.Log(listRequest.Error.message); 94 | listRequest = null; 95 | } 96 | } 97 | else 98 | { 99 | bool noMorePackage = false; 100 | 101 | if(missingPackages.Count > 0) 102 | EditorUtility.DisplayProgressBar("Importing package", "Importing missing package for the project", 1.0f - missingPackages.Count/(float)packageToAdd.Count); 103 | else 104 | EditorUtility.ClearProgressBar(); 105 | 106 | if (addRequest == null) 107 | { 108 | if (missingPackages.Count == 0) 109 | { 110 | noMorePackage = true; 111 | } 112 | else 113 | { 114 | int package = missingPackages.Pop(); 115 | string name = packageToAdd[package].name; 116 | if (packageToAdd[package].version != null) 117 | name += "@" + packageToAdd[package].version; 118 | 119 | addRequest = Client.Add(name); 120 | } 121 | } 122 | else 123 | { 124 | if (addRequest.IsCompleted) 125 | { 126 | if (addRequest.Error != null) 127 | { 128 | Debug.LogError("[Auto Package Error] : " + addRequest.Error.message); 129 | } 130 | else if (addRequest.Result != null) 131 | { 132 | Debug.Log("[Auto Package] : Automatically added package " + addRequest.Result.displayName); 133 | } 134 | else 135 | { 136 | Debug.LogError("[Auto Package] : Unknown error with adding new package to the Package Manager"); 137 | } 138 | 139 | addRequest = null; 140 | } 141 | } 142 | 143 | if (noMorePackage) 144 | { 145 | Debug.Log("[Auto Package] : All packages checked"); 146 | EditorApplication.update -= Update; 147 | } 148 | } 149 | } 150 | } 151 | 152 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/PackageManagerChecker.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 315aaff6e02bb5c419ff7911f83230b3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/PackageManagerTestAssembly.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PackageManagerAssembly", 3 | "references": [], 4 | "optionalUnityReferences": [], 5 | "includePlatforms": [ 6 | "Editor" 7 | ], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": false 10 | } -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/PackageManagerTestAssembly.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 752d900d5d6bfad4298da6da0dd95de9 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/packagemanagercheck.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: 2bcdc6922393b0442846eb98977c87ae, type: 3} 12 | m_Name: packagemanagercheck 13 | m_EditorClassIdentifier: 14 | packageName: Package 15 | dependenciesID: [] 16 | outputPath: [] 17 | -------------------------------------------------------------------------------- /Assets/PackageManagerCheck/packagemanagercheck.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 65c0846bf7c26534ba1ab83a7b610809 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PresetImporter.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8ac367d64e24f4f40b3cf83dc0891d14 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PresetImporter/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa705c3846dafe844941c2a9c5767d79 3 | folderAsset: yes 4 | timeCreated: 1486132026 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/PresetImporter/Editor/AssetImporterOptions.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | using UnityEditor.AnimatedValues; 6 | using UnityEditor.Presets; 7 | 8 | [CreateAssetMenu(fileName = "AssetImporterOptions", menuName = "Asset Importer Option")] 9 | public class AssetImporterOptions : ScriptableObject 10 | { 11 | [System.Serializable] 12 | public class ImportOption 13 | { 14 | public string nameFilter; 15 | public bool presetEnabled; 16 | public Preset preset; 17 | } 18 | 19 | public ImportOption[] importOptions; 20 | } 21 | 22 | 23 | [CustomEditor(typeof(AssetImporterOptions))] 24 | public class AssetImporterOptionsEditor : Editor 25 | { 26 | protected AssetImporterOptions _opts; 27 | 28 | protected bool[] m_InspectorsFade; 29 | 30 | protected TextureImporter defaultTextureImport; 31 | protected ModelImporter defaultMeshImporter; 32 | 33 | protected GenericMenu importerMenu = new GenericMenu(); 34 | 35 | 36 | private void OnEnable() 37 | { 38 | _opts = target as AssetImporterOptions; 39 | 40 | if (_opts.importOptions != null) 41 | { 42 | m_InspectorsFade = new bool[_opts.importOptions.Length]; 43 | for (int i = 0; i < _opts.importOptions.Length; ++i) 44 | { 45 | m_InspectorsFade[i] = false; 46 | } 47 | } 48 | 49 | var meshasset = AssetDatabase.GUIDToAssetPath(AssetDatabase.FindAssets("__importermeshdummy__")[0]); 50 | var textureasset = AssetDatabase.GUIDToAssetPath(AssetDatabase.FindAssets("__importertexturedummy__")[0]); 51 | 52 | defaultMeshImporter = AssetImporter.GetAtPath(meshasset) as ModelImporter; 53 | defaultTextureImport = AssetImporter.GetAtPath(textureasset) as TextureImporter; 54 | 55 | importerMenu.AddItem(new GUIContent("Texture"), false, AddNewTypeofPreset, defaultTextureImport); 56 | importerMenu.AddItem(new GUIContent("Mesh"), false, AddNewTypeofPreset, defaultMeshImporter); 57 | } 58 | 59 | protected void AddNewPreset(Preset p) 60 | { 61 | AssetImporterOptions.ImportOption option = new AssetImporterOptions.ImportOption(); 62 | option.nameFilter = ""; 63 | option.presetEnabled = true; 64 | option.preset = p; 65 | 66 | if (_opts.importOptions == null) 67 | { 68 | _opts.importOptions = new AssetImporterOptions.ImportOption[0]; 69 | m_InspectorsFade = new bool[0]; 70 | } 71 | 72 | ArrayUtility.Add(ref _opts.importOptions, option); 73 | ArrayUtility.Add(ref m_InspectorsFade, false); 74 | 75 | AssetDatabase.AddObjectToAsset(p, _opts); 76 | AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(p)); 77 | AssetDatabase.Refresh(); 78 | } 79 | 80 | public void AddNewTypeofPreset(object obj) 81 | { 82 | Object unityObj = obj as Object; 83 | Preset newPreset = new Preset(unityObj); 84 | 85 | AddNewPreset(newPreset); 86 | EditorUtility.SetDirty(_opts); 87 | } 88 | 89 | public void RemovePreset(int index) 90 | { 91 | var opt = _opts.importOptions[index]; 92 | 93 | ArrayUtility.RemoveAt(ref _opts.importOptions, index); 94 | ArrayUtility.RemoveAt(ref m_InspectorsFade, index); 95 | 96 | string assetpath = AssetDatabase.GetAssetPath(opt.preset); 97 | DestroyImmediate(opt.preset, true); 98 | AssetDatabase.ImportAsset(assetpath); 99 | AssetDatabase.Refresh(); 100 | } 101 | 102 | public override void OnInspectorGUI() 103 | { 104 | if (EditorGUILayout.DropdownButton(new GUIContent("New Preset"), FocusType.Passive, GUILayout.Width(100))) 105 | { 106 | importerMenu.ShowAsContext(); 107 | } 108 | 109 | if (_opts.importOptions != null) 110 | { 111 | Editor ed = null; 112 | bool deletionHappened = false; 113 | for (int i = 0; i < _opts.importOptions.Length; ++i) 114 | { 115 | deletionHappened = false; 116 | 117 | EditorGUILayout.BeginHorizontal(); 118 | m_InspectorsFade[i] = EditorGUILayout.Foldout(m_InspectorsFade[i], "Preset : " + _opts.importOptions[i].preset.GetTargetTypeName() + " on " + _opts.importOptions[i].nameFilter); 119 | 120 | if (GUILayout.Button("Delete", GUILayout.Width(100))) 121 | { 122 | if (EditorUtility.DisplayDialog("Confirm", "Are you sure you want to delete that preset rule?", 123 | "Delete", "Cancel")) 124 | { 125 | RemovePreset(i); 126 | i--; 127 | deletionHappened = true; 128 | } 129 | } 130 | 131 | EditorGUILayout.EndHorizontal(); 132 | 133 | EditorGUI.BeginChangeCheck(); 134 | 135 | if (!deletionHappened && m_InspectorsFade[i]) 136 | { 137 | _opts.importOptions[i].nameFilter = 138 | EditorGUILayout.TextField("Filter", _opts.importOptions[i].nameFilter); 139 | _opts.importOptions[i].presetEnabled = EditorGUILayout.Toggle("Preset is enabled", _opts.importOptions[i].presetEnabled); 140 | 141 | EditorGUILayout.BeginVertical("box"); 142 | 143 | CreateCachedEditor(_opts.importOptions[i].preset, 144 | System.Type.GetType("UnityEditor.Presets.PresetEditor, UnityEditor"), ref ed); 145 | //DrawPropertiesExcluding(serializedObjects[i], new string[]{}); 146 | ed.OnInspectorGUI(); 147 | 148 | EditorGUILayout.EndVertical(); 149 | } 150 | 151 | if (EditorGUI.EndChangeCheck()) 152 | EditorUtility.SetDirty(_opts); 153 | 154 | EditorGUILayout.EndFadeGroup(); 155 | } 156 | 157 | if (ed != null) 158 | { 159 | DestroyImmediate(ed); 160 | } 161 | } 162 | } 163 | } -------------------------------------------------------------------------------- /Assets/PresetImporter/Editor/AssetImporterOptions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 39d2d07167d4c4e4fa5b80092e1a4d69 3 | timeCreated: 1486132339 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/PresetImporter/Editor/DefaultAssetProcessor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Reflection; 5 | using System.Runtime.Serialization; 6 | using System.Runtime.Serialization.Formatters.Binary; 7 | using System.Text.RegularExpressions; 8 | using UnityEngine; 9 | using UnityEditor; 10 | 11 | public class DefaultAssetProcessor : AssetPostprocessor 12 | { 13 | public static string WildcardToRegex(string pattern) 14 | { 15 | return "^" + Regex.Escape(pattern) 16 | .Replace(@"\*", ".*") 17 | .Replace(@"\?", ".") 18 | + "$"; 19 | } 20 | 21 | void OnPreprocessModel() 22 | { 23 | ModelImporter importer = assetImporter as ModelImporter; 24 | 25 | string[] importerOptions = AssetDatabase.FindAssets("t:AssetImporterOptions"); 26 | if (importerOptions.Length == 0) 27 | return; // no options, we don't need to override any data. 28 | 29 | AssetImporterOptions opts = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(importerOptions[0])); 30 | 31 | for (int i = 0; i < opts.importOptions.Length; ++i) 32 | { 33 | if (opts.importOptions[i].presetEnabled && opts.importOptions[i].preset.CanBeAppliedTo(importer) && 34 | Regex.Match(System.IO.Path.GetFileName(assetPath), WildcardToRegex(opts.importOptions[i].nameFilter)).Success) 35 | { 36 | opts.importOptions[i].preset.ApplyTo(importer); 37 | } 38 | } 39 | } 40 | 41 | private void OnPreprocessTexture() 42 | { 43 | TextureImporter importer = assetImporter as TextureImporter; 44 | 45 | //If we already have a meta file for that asset, mean it's a reimport and not a first import, se we don't want to apply the preset 46 | if (File.Exists(AssetDatabase.GetTextMetaFilePathFromAssetPath(importer.assetPath))) 47 | return; 48 | 49 | Debug.Log("new import"); 50 | 51 | string[] importerOptions = AssetDatabase.FindAssets("t:AssetImporterOptions"); 52 | if (importerOptions.Length == 0) 53 | return; // no options, we don't need to override any data. 54 | 55 | AssetImporterOptions opts = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(importerOptions[0])); 56 | 57 | for (int i = 0; i < opts.importOptions.Length; ++i) 58 | { 59 | Debug.Log(Regex.Match(System.IO.Path.GetFileName(assetPath), WildcardToRegex(opts.importOptions[i].nameFilter)).Success); 60 | 61 | if (opts.importOptions[i].presetEnabled && opts.importOptions[i].preset.CanBeAppliedTo(importer) && 62 | Regex.Match(System.IO.Path.GetFileName(assetPath), WildcardToRegex(opts.importOptions[i].nameFilter)).Success) 63 | { 64 | // Preset made from texture importer save the width/height of the texture used to create the preset. 65 | // as our default preset are created from a 4x4 texture, applying the preset to any texture make that texture 4x4 66 | // so we save the original width/height of the texture & reapply it to the texture importer once the preset applied. 67 | // (this does not change any setting about maximum texture size) 68 | SerializedObject obj = new SerializedObject(importer); 69 | 70 | SerializedProperty widthProp = obj.FindProperty("m_Output.sourceTextureInformation.width"); 71 | SerializedProperty heightProp = obj.FindProperty("m_Output.sourceTextureInformation.height"); 72 | 73 | int prevW = widthProp.intValue; 74 | int prevH = heightProp.intValue; 75 | 76 | opts.importOptions[i].preset.ApplyTo(importer); 77 | 78 | obj.Update(); 79 | widthProp.intValue = prevW; 80 | heightProp.intValue = prevH; 81 | 82 | obj.ApplyModifiedProperties(); 83 | } 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /Assets/PresetImporter/Editor/DefaultAssetProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01046dd07f5e9764d9685d68f7eb6447 3 | timeCreated: 1486132061 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/PresetImporter/PresetImporter.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: 2bcdc6922393b0442846eb98977c87ae, type: 3} 12 | m_Name: PresetImporter 13 | m_EditorClassIdentifier: 14 | packageName: PresetImporter 15 | dependenciesID: 16 | - 8ac367d64e24f4f40b3cf83dc0891d14 17 | - 62446868fa5cdb04491254f6b476f480 18 | - c712e1dfe3a8d294f973ea3e49ecdbe5 19 | - 39d2d07167d4c4e4fa5b80092e1a4d69 20 | - 01046dd07f5e9764d9685d68f7eb6447 21 | outputPath: 22 | - Assets/PresetImporter 23 | - Assets/PresetImporter/__importermeshdummy__.obj 24 | - Assets/PresetImporter/__importertexturedummy__.png 25 | - Assets/PresetImporter/Editor/AssetImporterOptions.cs 26 | - Assets/PresetImporter/Editor/DefaultAssetProcessor.cs 27 | -------------------------------------------------------------------------------- /Assets/PresetImporter/PresetImporter.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d131c4160fcdac44e882c2c9095ac0c5 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PresetImporter/__importermeshdummy__.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.79 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | mtllib __importerdummy__.mtl 4 | o Plane 5 | v -1.002917 -0.012019 1.021426 6 | v 0.997083 -0.012019 1.021426 7 | v -1.002917 -0.012019 -0.978574 8 | v 0.997083 -0.012019 -0.978574 9 | vn 0.0000 1.0000 0.0000 10 | usemtl None 11 | s off 12 | f 1//1 2//1 4//1 3//1 13 | -------------------------------------------------------------------------------- /Assets/PresetImporter/__importermeshdummy__.obj.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62446868fa5cdb04491254f6b476f480 3 | ModelImporter: 4 | serializedVersion: 22 5 | fileIDToRecycleName: 6 | 100000: //RootNode 7 | 100002: default 8 | 400000: //RootNode 9 | 400002: default 10 | 2100000: None 11 | 2100002: defaultMat 12 | 2300000: default 13 | 3300000: default 14 | 4300000: default 15 | externalObjects: {} 16 | materials: 17 | importMaterials: 1 18 | materialName: 0 19 | materialSearch: 1 20 | materialLocation: 1 21 | animations: 22 | legacyGenerateAnimations: 4 23 | bakeSimulation: 0 24 | resampleCurves: 1 25 | optimizeGameObjects: 0 26 | motionNodeName: 27 | rigImportErrors: 28 | rigImportWarnings: 29 | animationImportErrors: 30 | animationImportWarnings: 31 | animationRetargetingWarnings: 32 | animationDoRetargetingWarnings: 0 33 | importAnimatedCustomProperties: 0 34 | importConstraints: 0 35 | animationCompression: 1 36 | animationRotationError: 0.5 37 | animationPositionError: 0.5 38 | animationScaleError: 0.5 39 | animationWrapMode: 0 40 | extraExposedTransformPaths: [] 41 | extraUserProperties: [] 42 | clipAnimations: [] 43 | isReadable: 1 44 | meshes: 45 | lODScreenPercentages: [] 46 | globalScale: 1 47 | meshCompression: 0 48 | addColliders: 0 49 | importVisibility: 1 50 | importBlendShapes: 1 51 | importCameras: 1 52 | importLights: 1 53 | swapUVChannels: 0 54 | generateSecondaryUV: 0 55 | useFileUnits: 1 56 | optimizeMeshForGPU: 1 57 | keepQuads: 0 58 | weldVertices: 1 59 | preserveHierarchy: 0 60 | indexFormat: 0 61 | secondaryUVAngleDistortion: 8 62 | secondaryUVAreaDistortion: 15.000001 63 | secondaryUVHardAngle: 88 64 | secondaryUVPackMargin: 4 65 | useFileScale: 1 66 | tangentSpace: 67 | normalSmoothAngle: 60 68 | normalImportMode: 0 69 | tangentImportMode: 3 70 | normalCalculationMode: 4 71 | importAnimation: 1 72 | copyAvatar: 0 73 | humanDescription: 74 | serializedVersion: 2 75 | human: [] 76 | skeleton: [] 77 | armTwist: 0.5 78 | foreArmTwist: 0.5 79 | upperLegTwist: 0.5 80 | legTwist: 0.5 81 | armStretch: 0.05 82 | legStretch: 0.05 83 | feetSpacing: 0 84 | rootMotionBoneName: 85 | rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} 86 | hasTranslationDoF: 0 87 | hasExtraRoot: 0 88 | skeletonHasParents: 1 89 | lastHumanDescriptionAvatarSource: {instanceID: 0} 90 | animationType: 0 91 | humanoidOversampling: 1 92 | additionalBone: 0 93 | userData: 94 | assetBundleName: 95 | assetBundleVariant: 96 | -------------------------------------------------------------------------------- /Assets/PresetImporter/__importertexturedummy__.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Unity-Technologies/ToolsCollection/baa5da7800cd7f3802fd61968700ed5b08f70665/Assets/PresetImporter/__importertexturedummy__.png -------------------------------------------------------------------------------- /Assets/PresetImporter/__importertexturedummy__.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c712e1dfe3a8d294f973ea3e49ecdbe5 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 5 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | grayScaleToAlpha: 0 25 | generateCubemap: 6 26 | cubemapConvolution: 0 27 | seamlessCubemap: 0 28 | textureFormat: 1 29 | maxTextureSize: 2048 30 | textureSettings: 31 | serializedVersion: 2 32 | filterMode: -1 33 | aniso: -1 34 | mipBias: -1 35 | wrapU: -1 36 | wrapV: -1 37 | wrapW: -1 38 | nPOTScale: 1 39 | lightmap: 0 40 | compressionQuality: 50 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaUsage: 1 49 | alphaIsTransparency: 0 50 | spriteTessellationDetail: -1 51 | textureType: 0 52 | textureShape: 1 53 | singleChannelComponent: 0 54 | maxTextureSizeSet: 0 55 | compressionQualitySet: 0 56 | textureFormatSet: 0 57 | platformSettings: 58 | - serializedVersion: 2 59 | buildTarget: DefaultTexturePlatform 60 | maxTextureSize: 2048 61 | resizeAlgorithm: 0 62 | textureFormat: -1 63 | textureCompression: 1 64 | compressionQuality: 50 65 | crunchedCompression: 0 66 | allowsAlphaSplitting: 0 67 | overridden: 0 68 | androidETC2FallbackOverride: 0 69 | spriteSheet: 70 | serializedVersion: 2 71 | sprites: [] 72 | outline: [] 73 | physicsShape: [] 74 | bones: [] 75 | spriteID: 76 | vertices: [] 77 | indices: 78 | edges: [] 79 | weights: [] 80 | spritePackingTag: 81 | userData: 82 | assetBundleName: 83 | assetBundleVariant: 84 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | } 4 | } 5 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 1 23 | m_ClothInterCollisionSettingsToggle: 0 24 | m_ContactPairsMode: 0 25 | m_BroadphaseType: 0 26 | m_WorldBounds: 27 | m_Center: {x: 0, y: 0, z: 0} 28 | m_Extent: {x: 250, y: 250, z: 250} 29 | m_WorldSubdivisions: 8 30 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_ExternalVersionControlSupport: Hidden Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 0 11 | m_SpritePackerMode: 0 12 | m_SpritePackerPaddingPower: 1 13 | m_EtcTextureCompressorBehavior: 1 14 | m_EtcTextureFastCompressor: 1 15 | m_EtcTextureNormalCompressor: 2 16 | m_EtcTextureBestCompressor: 4 17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp 18 | m_ProjectGenerationRootNamespace: 19 | m_UserGeneratedProjectSuffix: 20 | m_CollabEditorSettings: 21 | inProgressEnabled: 1 22 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_AutoSyncTransforms: 1 28 | m_AlwaysShowColliders: 0 29 | m_ShowColliderSleep: 1 30 | m_ShowColliderContacts: 0 31 | m_ShowColliderAABB: 0 32 | m_ContactArrowScale: 0.2 33 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 34 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 35 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 36 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 37 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 38 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 15 7 | productGUID: a6a4d1db179c0be4ca2486f1d96c6917 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: ToolCollection 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | tizenShowActivityIndicatorOnLoading: -1 56 | iosAppInBackgroundBehavior: 0 57 | displayResolutionDialog: 1 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidBlitType: 0 68 | defaultIsNativeResolution: 1 69 | macRetinaSupport: 1 70 | runInBackground: 0 71 | captureSingleScreen: 0 72 | muteOtherAudioSources: 0 73 | Prepare IOS For Recording: 0 74 | Force IOS Speakers When Recording: 0 75 | deferSystemGesturesMode: 0 76 | hideHomeButton: 0 77 | submitAnalytics: 1 78 | usePlayerLog: 1 79 | bakeCollisionMeshes: 0 80 | forceSingleInstance: 0 81 | resizableWindow: 0 82 | useMacAppStoreValidation: 0 83 | macAppStoreCategory: public.app-category.games 84 | gpuSkinning: 0 85 | graphicsJobs: 0 86 | xboxPIXTextureCapture: 0 87 | xboxEnableAvatar: 0 88 | xboxEnableKinect: 0 89 | xboxEnableKinectAutoTracking: 0 90 | xboxEnableFitness: 0 91 | visibleInBackground: 1 92 | allowFullscreenSwitch: 1 93 | graphicsJobMode: 0 94 | fullscreenMode: -1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | n3dsDisableStereoscopicView: 0 101 | n3dsEnableSharedListOpt: 1 102 | n3dsEnableVSync: 0 103 | xboxOneResolution: 0 104 | xboxOneSResolution: 0 105 | xboxOneXResolution: 3 106 | xboxOneMonoLoggingLevel: 0 107 | xboxOneLoggingLevel: 1 108 | xboxOneDisableEsram: 0 109 | xboxOnePresentImmediateThreshold: 0 110 | videoMemoryForVertexBuffers: 0 111 | psp2PowerMode: 0 112 | psp2AcquireBGM: 1 113 | m_SupportedAspectRatios: 114 | 4:3: 1 115 | 5:4: 1 116 | 16:10: 1 117 | 16:9: 1 118 | Others: 1 119 | bundleVersion: 1.0 120 | preloadedAssets: [] 121 | metroInputSource: 0 122 | wsaTransparentSwapchain: 0 123 | m_HolographicPauseOnTrackingLoss: 1 124 | xboxOneDisableKinectGpuReservation: 0 125 | xboxOneEnable7thCore: 0 126 | vrSettings: 127 | cardboard: 128 | depthFormat: 0 129 | enableTransitionView: 0 130 | daydream: 131 | depthFormat: 0 132 | useSustainedPerformanceMode: 0 133 | enableVideoLayer: 0 134 | useProtectedVideoMemory: 0 135 | minimumSupportedHeadTracking: 0 136 | maximumSupportedHeadTracking: 1 137 | hololens: 138 | depthFormat: 1 139 | depthBufferSharingEnabled: 0 140 | enable360StereoCapture: 0 141 | oculus: 142 | sharedDepthBuffer: 0 143 | dashSupport: 0 144 | protectGraphicsMemory: 0 145 | useHDRDisplay: 0 146 | m_ColorGamuts: 00000000 147 | targetPixelDensity: 30 148 | resolutionScalingMode: 0 149 | androidSupportedAspectRatio: 1 150 | androidMaxAspectRatio: 2.1 151 | applicationIdentifier: {} 152 | buildNumber: {} 153 | AndroidBundleVersionCode: 1 154 | AndroidMinSdkVersion: 16 155 | AndroidTargetSdkVersion: 0 156 | AndroidPreferredInstallLocation: 1 157 | aotOptions: 158 | stripEngineCode: 1 159 | iPhoneStrippingLevel: 0 160 | iPhoneScriptCallOptimization: 0 161 | ForceInternetPermission: 0 162 | ForceSDCardPermission: 0 163 | CreateWallpaper: 0 164 | APKExpansionFiles: 0 165 | keepLoadedShadersAlive: 0 166 | StripUnusedMeshComponents: 0 167 | VertexChannelCompressionMask: 214 168 | iPhoneSdkVersion: 988 169 | iOSTargetOSVersionString: 8.0 170 | tvOSSdkVersion: 0 171 | tvOSRequireExtendedGameController: 0 172 | tvOSTargetOSVersionString: 9.0 173 | uIPrerenderedIcon: 0 174 | uIRequiresPersistentWiFi: 0 175 | uIRequiresFullScreen: 1 176 | uIStatusBarHidden: 1 177 | uIExitOnSuspend: 0 178 | uIStatusBarStyle: 0 179 | iPhoneSplashScreen: {fileID: 0} 180 | iPhoneHighResSplashScreen: {fileID: 0} 181 | iPhoneTallHighResSplashScreen: {fileID: 0} 182 | iPhone47inSplashScreen: {fileID: 0} 183 | iPhone55inPortraitSplashScreen: {fileID: 0} 184 | iPhone55inLandscapeSplashScreen: {fileID: 0} 185 | iPhone58inPortraitSplashScreen: {fileID: 0} 186 | iPhone58inLandscapeSplashScreen: {fileID: 0} 187 | iPadPortraitSplashScreen: {fileID: 0} 188 | iPadHighResPortraitSplashScreen: {fileID: 0} 189 | iPadLandscapeSplashScreen: {fileID: 0} 190 | iPadHighResLandscapeSplashScreen: {fileID: 0} 191 | appleTVSplashScreen: {fileID: 0} 192 | appleTVSplashScreen2x: {fileID: 0} 193 | tvOSSmallIconLayers: [] 194 | tvOSSmallIconLayers2x: [] 195 | tvOSLargeIconLayers: [] 196 | tvOSLargeIconLayers2x: [] 197 | tvOSTopShelfImageLayers: [] 198 | tvOSTopShelfImageLayers2x: [] 199 | tvOSTopShelfImageWideLayers: [] 200 | tvOSTopShelfImageWideLayers2x: [] 201 | iOSLaunchScreenType: 0 202 | iOSLaunchScreenPortrait: {fileID: 0} 203 | iOSLaunchScreenLandscape: {fileID: 0} 204 | iOSLaunchScreenBackgroundColor: 205 | serializedVersion: 2 206 | rgba: 0 207 | iOSLaunchScreenFillPct: 100 208 | iOSLaunchScreenSize: 100 209 | iOSLaunchScreenCustomXibPath: 210 | iOSLaunchScreeniPadType: 0 211 | iOSLaunchScreeniPadImage: {fileID: 0} 212 | iOSLaunchScreeniPadBackgroundColor: 213 | serializedVersion: 2 214 | rgba: 0 215 | iOSLaunchScreeniPadFillPct: 100 216 | iOSLaunchScreeniPadSize: 100 217 | iOSLaunchScreeniPadCustomXibPath: 218 | iOSUseLaunchScreenStoryboard: 0 219 | iOSLaunchScreenCustomStoryboardPath: 220 | iOSDeviceRequirements: [] 221 | iOSURLSchemes: [] 222 | iOSBackgroundModes: 0 223 | iOSMetalForceHardShadows: 0 224 | metalEditorSupport: 1 225 | metalAPIValidation: 1 226 | iOSRenderExtraFrameOnPause: 0 227 | appleDeveloperTeamID: 228 | iOSManualSigningProvisioningProfileID: 229 | tvOSManualSigningProvisioningProfileID: 230 | appleEnableAutomaticSigning: 0 231 | iOSRequireARKit: 0 232 | appleEnableProMotion: 0 233 | clonedFromGUID: 00000000000000000000000000000000 234 | templatePackageId: 235 | templateDefaultScene: 236 | AndroidTargetArchitectures: 5 237 | AndroidSplashScreenScale: 0 238 | androidSplashScreen: {fileID: 0} 239 | AndroidKeystoreName: 240 | AndroidKeyaliasName: 241 | AndroidTVCompatibility: 1 242 | AndroidIsGame: 1 243 | AndroidEnableTango: 0 244 | androidEnableBanner: 1 245 | androidUseLowAccuracyLocation: 0 246 | m_AndroidBanners: 247 | - width: 320 248 | height: 180 249 | banner: {fileID: 0} 250 | androidGamepadSupportLevel: 0 251 | resolutionDialogBanner: {fileID: 0} 252 | m_BuildTargetIcons: [] 253 | m_BuildTargetPlatformIcons: [] 254 | m_BuildTargetBatching: [] 255 | m_BuildTargetGraphicsAPIs: [] 256 | m_BuildTargetVRSettings: [] 257 | m_BuildTargetEnableVuforiaSettings: [] 258 | openGLRequireES31: 0 259 | openGLRequireES31AEP: 0 260 | m_TemplateCustomTags: {} 261 | mobileMTRendering: 262 | Android: 1 263 | iPhone: 1 264 | tvOS: 1 265 | m_BuildTargetGroupLightmapEncodingQuality: [] 266 | playModeTestRunnerEnabled: 0 267 | runPlayModeTestAsEditModeTest: 0 268 | actionOnDotNetUnhandledException: 1 269 | enableInternalProfiler: 0 270 | logObjCUncaughtExceptions: 1 271 | enableCrashReportAPI: 0 272 | cameraUsageDescription: 273 | locationUsageDescription: 274 | microphoneUsageDescription: 275 | switchNetLibKey: 276 | switchSocketMemoryPoolSize: 6144 277 | switchSocketAllocatorPoolSize: 128 278 | switchSocketConcurrencyLimit: 14 279 | switchScreenResolutionBehavior: 2 280 | switchUseCPUProfiler: 0 281 | switchApplicationID: 0x01004b9000490000 282 | switchNSODependencies: 283 | switchTitleNames_0: 284 | switchTitleNames_1: 285 | switchTitleNames_2: 286 | switchTitleNames_3: 287 | switchTitleNames_4: 288 | switchTitleNames_5: 289 | switchTitleNames_6: 290 | switchTitleNames_7: 291 | switchTitleNames_8: 292 | switchTitleNames_9: 293 | switchTitleNames_10: 294 | switchTitleNames_11: 295 | switchTitleNames_12: 296 | switchTitleNames_13: 297 | switchTitleNames_14: 298 | switchPublisherNames_0: 299 | switchPublisherNames_1: 300 | switchPublisherNames_2: 301 | switchPublisherNames_3: 302 | switchPublisherNames_4: 303 | switchPublisherNames_5: 304 | switchPublisherNames_6: 305 | switchPublisherNames_7: 306 | switchPublisherNames_8: 307 | switchPublisherNames_9: 308 | switchPublisherNames_10: 309 | switchPublisherNames_11: 310 | switchPublisherNames_12: 311 | switchPublisherNames_13: 312 | switchPublisherNames_14: 313 | switchIcons_0: {fileID: 0} 314 | switchIcons_1: {fileID: 0} 315 | switchIcons_2: {fileID: 0} 316 | switchIcons_3: {fileID: 0} 317 | switchIcons_4: {fileID: 0} 318 | switchIcons_5: {fileID: 0} 319 | switchIcons_6: {fileID: 0} 320 | switchIcons_7: {fileID: 0} 321 | switchIcons_8: {fileID: 0} 322 | switchIcons_9: {fileID: 0} 323 | switchIcons_10: {fileID: 0} 324 | switchIcons_11: {fileID: 0} 325 | switchIcons_12: {fileID: 0} 326 | switchIcons_13: {fileID: 0} 327 | switchIcons_14: {fileID: 0} 328 | switchSmallIcons_0: {fileID: 0} 329 | switchSmallIcons_1: {fileID: 0} 330 | switchSmallIcons_2: {fileID: 0} 331 | switchSmallIcons_3: {fileID: 0} 332 | switchSmallIcons_4: {fileID: 0} 333 | switchSmallIcons_5: {fileID: 0} 334 | switchSmallIcons_6: {fileID: 0} 335 | switchSmallIcons_7: {fileID: 0} 336 | switchSmallIcons_8: {fileID: 0} 337 | switchSmallIcons_9: {fileID: 0} 338 | switchSmallIcons_10: {fileID: 0} 339 | switchSmallIcons_11: {fileID: 0} 340 | switchSmallIcons_12: {fileID: 0} 341 | switchSmallIcons_13: {fileID: 0} 342 | switchSmallIcons_14: {fileID: 0} 343 | switchManualHTML: 344 | switchAccessibleURLs: 345 | switchLegalInformation: 346 | switchMainThreadStackSize: 1048576 347 | switchPresenceGroupId: 348 | switchLogoHandling: 0 349 | switchReleaseVersion: 0 350 | switchDisplayVersion: 1.0.0 351 | switchStartupUserAccount: 0 352 | switchTouchScreenUsage: 0 353 | switchSupportedLanguagesMask: 0 354 | switchLogoType: 0 355 | switchApplicationErrorCodeCategory: 356 | switchUserAccountSaveDataSize: 0 357 | switchUserAccountSaveDataJournalSize: 0 358 | switchApplicationAttribute: 0 359 | switchCardSpecSize: -1 360 | switchCardSpecClock: -1 361 | switchRatingsMask: 0 362 | switchRatingsInt_0: 0 363 | switchRatingsInt_1: 0 364 | switchRatingsInt_2: 0 365 | switchRatingsInt_3: 0 366 | switchRatingsInt_4: 0 367 | switchRatingsInt_5: 0 368 | switchRatingsInt_6: 0 369 | switchRatingsInt_7: 0 370 | switchRatingsInt_8: 0 371 | switchRatingsInt_9: 0 372 | switchRatingsInt_10: 0 373 | switchRatingsInt_11: 0 374 | switchLocalCommunicationIds_0: 375 | switchLocalCommunicationIds_1: 376 | switchLocalCommunicationIds_2: 377 | switchLocalCommunicationIds_3: 378 | switchLocalCommunicationIds_4: 379 | switchLocalCommunicationIds_5: 380 | switchLocalCommunicationIds_6: 381 | switchLocalCommunicationIds_7: 382 | switchParentalControl: 0 383 | switchAllowsScreenshot: 1 384 | switchAllowsVideoCapturing: 1 385 | switchAllowsRuntimeAddOnContentInstall: 0 386 | switchDataLossConfirmation: 0 387 | switchSupportedNpadStyles: 3 388 | switchSocketConfigEnabled: 0 389 | switchTcpInitialSendBufferSize: 32 390 | switchTcpInitialReceiveBufferSize: 64 391 | switchTcpAutoSendBufferSizeMax: 256 392 | switchTcpAutoReceiveBufferSizeMax: 256 393 | switchUdpSendBufferSize: 9 394 | switchUdpReceiveBufferSize: 42 395 | switchSocketBufferEfficiency: 4 396 | switchSocketInitializeEnabled: 1 397 | switchNetworkInterfaceManagerInitializeEnabled: 1 398 | switchPlayerConnectionEnabled: 1 399 | ps4NPAgeRating: 12 400 | ps4NPTitleSecret: 401 | ps4NPTrophyPackPath: 402 | ps4ParentalLevel: 11 403 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 404 | ps4Category: 0 405 | ps4MasterVersion: 01.00 406 | ps4AppVersion: 01.00 407 | ps4AppType: 0 408 | ps4ParamSfxPath: 409 | ps4VideoOutPixelFormat: 0 410 | ps4VideoOutInitialWidth: 1920 411 | ps4VideoOutBaseModeInitialWidth: 1920 412 | ps4VideoOutReprojectionRate: 60 413 | ps4PronunciationXMLPath: 414 | ps4PronunciationSIGPath: 415 | ps4BackgroundImagePath: 416 | ps4StartupImagePath: 417 | ps4StartupImagesFolder: 418 | ps4IconImagesFolder: 419 | ps4SaveDataImagePath: 420 | ps4SdkOverride: 421 | ps4BGMPath: 422 | ps4ShareFilePath: 423 | ps4ShareOverlayImagePath: 424 | ps4PrivacyGuardImagePath: 425 | ps4NPtitleDatPath: 426 | ps4RemotePlayKeyAssignment: -1 427 | ps4RemotePlayKeyMappingDir: 428 | ps4PlayTogetherPlayerCount: 0 429 | ps4EnterButtonAssignment: 1 430 | ps4ApplicationParam1: 0 431 | ps4ApplicationParam2: 0 432 | ps4ApplicationParam3: 0 433 | ps4ApplicationParam4: 0 434 | ps4DownloadDataSize: 0 435 | ps4GarlicHeapSize: 2048 436 | ps4ProGarlicHeapSize: 2560 437 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 438 | ps4pnSessions: 1 439 | ps4pnPresence: 1 440 | ps4pnFriends: 1 441 | ps4pnGameCustomData: 1 442 | playerPrefsSupport: 0 443 | enableApplicationExit: 0 444 | restrictedAudioUsageRights: 0 445 | ps4UseResolutionFallback: 0 446 | ps4ReprojectionSupport: 0 447 | ps4UseAudio3dBackend: 0 448 | ps4SocialScreenEnabled: 0 449 | ps4ScriptOptimizationLevel: 0 450 | ps4Audio3dVirtualSpeakerCount: 14 451 | ps4attribCpuUsage: 0 452 | ps4PatchPkgPath: 453 | ps4PatchLatestPkgPath: 454 | ps4PatchChangeinfoPath: 455 | ps4PatchDayOne: 0 456 | ps4attribUserManagement: 0 457 | ps4attribMoveSupport: 0 458 | ps4attrib3DSupport: 0 459 | ps4attribShareSupport: 0 460 | ps4attribExclusiveVR: 0 461 | ps4disableAutoHideSplash: 0 462 | ps4videoRecordingFeaturesUsed: 0 463 | ps4contentSearchFeaturesUsed: 0 464 | ps4attribEyeToEyeDistanceSettingVR: 0 465 | ps4IncludedModules: [] 466 | monoEnv: 467 | psp2Splashimage: {fileID: 0} 468 | psp2NPTrophyPackPath: 469 | psp2NPSupportGBMorGJP: 0 470 | psp2NPAgeRating: 12 471 | psp2NPTitleDatPath: 472 | psp2NPCommsID: 473 | psp2NPCommunicationsID: 474 | psp2NPCommsPassphrase: 475 | psp2NPCommsSig: 476 | psp2ParamSfxPath: 477 | psp2ManualPath: 478 | psp2LiveAreaGatePath: 479 | psp2LiveAreaBackroundPath: 480 | psp2LiveAreaPath: 481 | psp2LiveAreaTrialPath: 482 | psp2PatchChangeInfoPath: 483 | psp2PatchOriginalPackage: 484 | psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui 485 | psp2KeystoneFile: 486 | psp2MemoryExpansionMode: 0 487 | psp2DRMType: 0 488 | psp2StorageType: 0 489 | psp2MediaCapacity: 0 490 | psp2DLCConfigPath: 491 | psp2ThumbnailPath: 492 | psp2BackgroundPath: 493 | psp2SoundPath: 494 | psp2TrophyCommId: 495 | psp2TrophyPackagePath: 496 | psp2PackagedResourcesPath: 497 | psp2SaveDataQuota: 10240 498 | psp2ParentalLevel: 1 499 | psp2ShortTitle: Not Set 500 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF 501 | psp2Category: 0 502 | psp2MasterVersion: 01.00 503 | psp2AppVersion: 01.00 504 | psp2TVBootMode: 0 505 | psp2EnterButtonAssignment: 2 506 | psp2TVDisableEmu: 0 507 | psp2AllowTwitterDialog: 1 508 | psp2Upgradable: 0 509 | psp2HealthWarning: 0 510 | psp2UseLibLocation: 0 511 | psp2InfoBarOnStartup: 0 512 | psp2InfoBarColor: 0 513 | psp2ScriptOptimizationLevel: 0 514 | splashScreenBackgroundSourceLandscape: {fileID: 0} 515 | splashScreenBackgroundSourcePortrait: {fileID: 0} 516 | spritePackerPolicy: 517 | webGLMemorySize: 256 518 | webGLExceptionSupport: 1 519 | webGLNameFilesAsHashes: 0 520 | webGLDataCaching: 0 521 | webGLDebugSymbols: 0 522 | webGLEmscriptenArgs: 523 | webGLModulesDirectory: 524 | webGLTemplate: APPLICATION:Default 525 | webGLAnalyzeBuildSize: 0 526 | webGLUseEmbeddedResources: 0 527 | webGLCompressionFormat: 1 528 | webGLLinkerTarget: 0 529 | scriptingDefineSymbols: {} 530 | platformArchitecture: {} 531 | scriptingBackend: {} 532 | il2cppCompilerConfiguration: {} 533 | incrementalIl2cppBuild: {} 534 | additionalIl2CppArgs: 535 | scriptingRuntimeVersion: 0 536 | apiCompatibilityLevelPerPlatform: {} 537 | m_RenderingPath: 1 538 | m_MobileRenderingPath: 1 539 | metroPackageName: ToolCollection 540 | metroPackageVersion: 541 | metroCertificatePath: 542 | metroCertificatePassword: 543 | metroCertificateSubject: 544 | metroCertificateIssuer: 545 | metroCertificateNotAfter: 0000000000000000 546 | metroApplicationDescription: ToolCollection 547 | wsaImages: {} 548 | metroTileShortName: 549 | metroCommandLineArgsFile: 550 | metroTileShowName: 0 551 | metroMediumTileShowName: 0 552 | metroLargeTileShowName: 0 553 | metroWideTileShowName: 0 554 | metroDefaultTileSize: 1 555 | metroTileForegroundText: 2 556 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 557 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 558 | a: 1} 559 | metroSplashScreenUseBackgroundColor: 0 560 | platformCapabilities: {} 561 | metroFTAName: 562 | metroFTAFileTypes: [] 563 | metroProtocolName: 564 | metroCompilationOverrides: 1 565 | tizenProductDescription: 566 | tizenProductURL: 567 | tizenSigningProfileName: 568 | tizenGPSPermissions: 0 569 | tizenMicrophonePermissions: 0 570 | tizenDeploymentTarget: 571 | tizenDeploymentTargetType: -1 572 | tizenMinOSVersion: 1 573 | n3dsUseExtSaveData: 0 574 | n3dsCompressStaticMem: 1 575 | n3dsExtSaveDataNumber: 0x12345 576 | n3dsStackSize: 131072 577 | n3dsTargetPlatform: 2 578 | n3dsRegion: 7 579 | n3dsMediaSize: 0 580 | n3dsLogoStyle: 3 581 | n3dsTitle: GameName 582 | n3dsProductCode: 583 | n3dsApplicationId: 0xFF3FF 584 | XboxOneProductId: 585 | XboxOneUpdateKey: 586 | XboxOneSandboxId: 587 | XboxOneContentId: 588 | XboxOneTitleId: 589 | XboxOneSCId: 590 | XboxOneGameOsOverridePath: 591 | XboxOnePackagingOverridePath: 592 | XboxOneAppManifestOverridePath: 593 | XboxOnePackageEncryption: 0 594 | XboxOnePackageUpdateGranularity: 2 595 | XboxOneDescription: 596 | XboxOneLanguage: 597 | - enus 598 | XboxOneCapability: [] 599 | XboxOneGameRating: {} 600 | XboxOneIsContentPackage: 0 601 | XboxOneEnableGPUVariability: 0 602 | XboxOneSockets: {} 603 | XboxOneSplashScreen: {fileID: 0} 604 | XboxOneAllowedProductIds: [] 605 | XboxOnePersistentLocalStorageSize: 0 606 | xboxOneScriptCompiler: 0 607 | vrEditorSettings: 608 | daydream: 609 | daydreamIconForeground: {fileID: 0} 610 | daydreamIconBackground: {fileID: 0} 611 | cloudServicesEnabled: {} 612 | facebookSdkVersion: 7.9.4 613 | apiCompatibilityLevel: 2 614 | cloudProjectId: 615 | projectName: 616 | organizationId: 617 | cloudEnabled: 0 618 | enableNativePlatformBackendsForNewInputSystem: 0 619 | disableOldInputManagerSupport: 0 620 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2018.2.0b7 2 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 4 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 4 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 1 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 1 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 4 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 2 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 1 108 | antiAliasing: 0 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 1 112 | billboardsFaceCameraPosition: 1 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 4 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 2 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 70 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 2 136 | antiAliasing: 2 137 | softParticles: 1 138 | softVegetation: 1 139 | realtimeReflectionProbes: 1 140 | billboardsFaceCameraPosition: 1 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 4 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 4 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSM: 5 183 | PSP2: 2 184 | Standalone: 5 185 | Tizen: 2 186 | WebGL: 3 187 | WiiU: 5 188 | Windows Store Apps: 5 189 | XboxOne: 5 190 | iPhone: 2 191 | tvOS: 2 192 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | m_Enabled: 0 7 | m_TestMode: 0 8 | m_TestEventUrl: 9 | m_TestConfigUrl: 10 | m_TestInitMode: 0 11 | CrashReportingSettings: 12 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes 13 | m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate 14 | m_Enabled: 0 15 | m_CaptureEditorExceptions: 1 16 | UnityPurchasingSettings: 17 | m_Enabled: 0 18 | m_TestMode: 0 19 | UnityAnalyticsSettings: 20 | m_Enabled: 0 21 | m_InitializeOnStartup: 1 22 | m_TestMode: 0 23 | m_TestEventUrl: 24 | m_TestConfigUrl: 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | Tool Collection 2 | =============== 3 | 4 | This repository is used to gather together all the little editor script & tools 5 | that we write for different projects. 6 | 7 | **Note : all those tools are WIP and experimental and sometime not the most stable. 8 | Use at your own risk. Be sure that your project is on source control so if some 9 | delete files you can recovers them!** 10 | 11 | Each live in its own folder under the Assets folder. 12 | 13 | Through the **Package Designer** tool (see wiki for documentation) each tool can 14 | be easily export to a unity Package to be imported by itself inside a projects 15 | 16 | *Longer term goal is to have a build computer somewhere exporting those package 17 | automatically from time to time & upload them somewhere so people can just go 18 | and download the unitypackage directly* 19 | 20 | ## List of included tools 21 | 22 | ### Reference Finder 23 | 24 | A tool to find all reference to a given function used in Unity Event inside the 25 | editor. Allow to check before removing a function that seemed used nowhere that 26 | it is not referenced by a Unity Event (and so would only fail during execution) 27 | 28 | ### Missing Scripts Finder 29 | 30 | Allow to find objects with Missing Script references in both prefabs and scenes. 31 | 32 | Just open the window from the Content Extensions/Missing Script Finder menu entry 33 | and either click find in Assets or find in Current Scene 34 | 35 | ### Package Manager Check 36 | 37 | Separate assembly that allow to check if a package is part of the project on first 38 | import and add it if it's missing. Used by the Content Team when distributing a 39 | full project on the Asset Stores that requires packages (as the Asset Store Tool 40 | don't include yet the Packages Manifest). 41 | 42 | Require to be placed in an editor folder with a file somewhere (ideally next to it) 43 | called `PackageImportList.txt` that containt a list of the package of the form : 44 | `com.unity.package@version`. 45 | 46 | e.g 47 | ```com.unity.postprocessing@2.0.3-preview 48 | com.unity.cinemachine@2.1.12 49 | com.unity.probuilder@3.0.3 50 | com.unity.textmeshpro@1.2.2 51 | ``` 52 | 53 | ### Package Designer 54 | 55 | The Package Designer is a tool that allow to define package from assets, save 56 | that configuration as asset in the project and export them into a unitypackage 57 | through a single click. 58 | 59 | It also allow to reorganize said assets in a different hierarchy than the one 60 | they are in the project before export (e.g you may want to group mesh, material 61 | and textures of a character inside a folder with the character name instead 62 | of in 3 differents mesh/material/texture folder in the root of the package) 63 | 64 | See the Wiki for more documentation 65 | 66 | ### Preset Importer 67 | 68 | The Preset Importer allow to define preset to apply on import to file that 69 | match a given filter. 70 | 71 | One example is to make a preset to import all file having `_Normal` in their 72 | filename as Normal. 73 | 74 | See Wiki for more info on how to use 75 | -------------------------------------------------------------------------------- /buildpackage.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import sys 3 | import os 4 | import shutil 5 | 6 | os.makedirs('Bin') 7 | print subprocess.check_output([sys.argv[1],'-projectPath',os.getcwd(), '-logFile','Bin/Build.log', '-batchmode', '-executeMethod', 'PackageDesigner.CommandLineExportAllPackage', os.getcwd()+'/Bin']) 8 | --------------------------------------------------------------------------------