private static void HandleGameModeAssets() { //This will be called when unity reloads scripts //Make sure the GameModes folder exists CreateFolder(GameModeMgrEditor.gameModeFolder); //Find the GUID of all assets in the gameModeFolder string[] allGameModesGUIDs = AssetDatabase.FindAssets("", new string[] { GameModeMgrEditor.gameModeFolder }); GameModeBase[] allGameModes = new GameModeBase[allGameModesGUIDs.Length]; int GUIDIndex = 0; foreach (string GUID in allGameModesGUIDs) { //Get the asset path from the GUID string assetPath = AssetDatabase.GUIDToAssetPath(GUID); //Load the asset GameModeBase gameMode = AssetDatabase.LoadAssetAtPath <GameModeBase>(assetPath); //Make sure the script hasnt been deleted if (gameMode != null) { //Add it to the array allGameModes[GUIDIndex] = gameMode; } else { //The script has been deleted. Delete the asset file as well Debug.Log("Missing script file for GameMode '" + System.IO.Path.GetFileNameWithoutExtension(assetPath) + "', deleting."); AssetDatabase.DeleteAsset(assetPath); } GUIDIndex++; } //Find all classes that inherit GameModeBase foreach (System.Type type in GameMode.GameMode.GetAllClassesInheritingClass <GameModeBase>(false)) { //Make sure this GameMode class has its own asset file if (allGameModes.Any(gameMode => gameMode != null && gameMode.name == type.Name)) { //Debug.Log(type.Name + " has an asset file."); } else { Debug.Log("Discovered new GameMode class '" + type.Name + "'. Creating a settings asset in " + GameModeMgrEditor.gameModeFolder); CreateGameModeAsset(type); } } }