public void TryDetectIssuesInSettingsAsset(AssetInfo asset, AssetSettingsKind kind) { if (!enabled) { return; } var newIssues = SettingsChecker.CheckSettingsAssetForMissingReferences(asset, kind); if (newIssues.Count > 0) { issues.AddRange(newIssues); } }
internal static string[] FindDependencies(AssetSettingsKind settingsKind, Type type, AssetKind kind, string path) { var dependenciesGUIDs = new HashSet <string>(); if (settingsKind == AssetSettingsKind.NotSettings) { /* pre-regular dependenciesGUIDs additions */ FillDependencies(InternalDependenciesParsers, ref dependenciesGUIDs, kind, type, path); /* regular dependenciesGUIDs additions */ var dependencies = AssetDatabase.GetDependencies(path, false); var guids = CSAssetTools.GetAssetsGUIDs(dependencies); if (guids != null && guids.Length > 0) { dependenciesGUIDs.UnionWith(guids); } } else { FillSettingsAssetDependencies(ref dependenciesGUIDs, path, settingsKind); } if (externalDependenciesParsers != null && externalDependenciesParsers.Count > 0) { FillDependencies(externalDependenciesParsers, ref dependenciesGUIDs, kind, type, path); } // kept for debugging purposes /*if (Path.Contains("1.unity")) * { * Debug.Log("1.unity non-recursive dependenciesGUIDs:"); * foreach (var reference in references) * { * Debug.Log(reference); * } * }*/ return(dependenciesGUIDs.ToArray()); }
public static AssetInfo Create(RawAssetInfo rawAssetInfo, Type type, AssetSettingsKind settingsKind) { if (string.IsNullOrEmpty(rawAssetInfo.guid)) { Debug.LogError("Can't create AssetInfo since guid is invalid!"); return(null); } var newAsset = new AssetInfo { GUID = rawAssetInfo.guid, Path = rawAssetInfo.path, Kind = rawAssetInfo.kind, Type = type, SettingsKind = settingsKind, fileInfo = new FileInfo(rawAssetInfo.path), metaFileInfo = new FileInfo(rawAssetInfo.path + ".meta") }; newAsset.UpdateIfNeeded(); return(newAsset); }
public static List <IssueRecord> CheckSettingsAssetForMissingReferences(AssetInfo asset, AssetSettingsKind kind) { var result = new List <IssueRecord>(); // include only supported settings files with object references if (kind != AssetSettingsKind.EditorSettings && kind != AssetSettingsKind.GraphicsSettings && kind != AssetSettingsKind.DynamicsManager && kind != AssetSettingsKind.Physics2DSettings && kind != AssetSettingsKind.PresetManager && kind != AssetSettingsKind.VFXManager) { return(result); } var allAssets = AssetDatabase.LoadAllAssetsAtPath(asset.Path); if (allAssets == null || allAssets.Length <= 0) { return(result); } foreach (var assetObject in allAssets) { if (assetObject == null) { return(result); } var traverseInfo = new SerializedObjectTraverseInfo(assetObject); CSTraverseTools.TraverseObjectProperties(traverseInfo, (info, property) => { if (MissingReferenceDetector.IsPropertyHasMissingReference(property)) { var issue = SettingsIssueRecord.Create(kind, IssueKind.MissingReference, asset.Path, property.propertyPath); result.Add(issue); } }); } return(result); }
public static bool RevealInSettings(AssetSettingsKind settingsKind, string path = null) { var result = true; switch (settingsKind) { case AssetSettingsKind.AudioManager: case AssetSettingsKind.ClusterInputManager: case AssetSettingsKind.InputManager: case AssetSettingsKind.NavMeshAreas: case AssetSettingsKind.NavMeshLayers: case AssetSettingsKind.NavMeshProjectSettings: case AssetSettingsKind.NetworkManager: break; case AssetSettingsKind.NotSettings: Debug.LogWarning(Maintainer.ConstructWarning("Can't open settings of kind NotSettings Oo")); result = false; break; case AssetSettingsKind.DynamicsManager: if (!CSMenuTools.ShowProjectSettingsPhysics()) { Debug.LogError(Maintainer.ConstructError("Can't open Physics Settings!")); result = false; } break; case AssetSettingsKind.EditorBuildSettings: if (!CSMenuTools.ShowEditorBuildSettings()) { Debug.LogError(Maintainer.ConstructError("Can't open EditorBuildSettings!")); result = false; } break; case AssetSettingsKind.EditorSettings: if (!CSMenuTools.ShowEditorSettings()) { Debug.LogError(Maintainer.ConstructError("Can't open Editor Settings!")); result = false; } break; case AssetSettingsKind.GraphicsSettings: if (!CSMenuTools.ShowProjectSettingsGraphics()) { Debug.LogError(Maintainer.ConstructError("Can't open GraphicsSettings!")); result = false; } break; case AssetSettingsKind.Physics2DSettings: if (!CSMenuTools.ShowProjectSettingsPhysics2D()) { Debug.LogError(Maintainer.ConstructError("Can't open Physics2D Settings!")); result = false; } break; case AssetSettingsKind.ProjectSettings: if (!CSMenuTools.ShowProjectSettingsPlayer()) { Debug.LogError(Maintainer.ConstructError("Can't open Player Settings!")); result = false; } break; case AssetSettingsKind.PresetManager: if (!CSMenuTools.ShowProjectSettingsPresetManager()) { Debug.LogError(Maintainer.ConstructError("Can't open Preset Manager!")); result = false; } break; case AssetSettingsKind.QualitySettings: break; case AssetSettingsKind.TagManager: if (!CSMenuTools.ShowProjectSettingsTagsAndLayers()) { Debug.LogError(Maintainer.ConstructError("Can't open Tags and Layers Settings!")); result = false; } break; case AssetSettingsKind.TimeManager: break; case AssetSettingsKind.UnityAdsSettings: break; case AssetSettingsKind.UnityConnectSettings: break; case AssetSettingsKind.VFXManager: if (!CSMenuTools.ShowProjectSettingsVFX()) { Debug.LogError(Maintainer.ConstructError("Can't open VFX Settings!")); result = false; } break; case AssetSettingsKind.Unknown: if (!string.IsNullOrEmpty(path)) { EditorUtility.RevealInFinder(path); } break; default: throw new ArgumentOutOfRangeException(); } return(result); }
protected SettingsIssueRecord(AssetSettingsKind settingsKind, IssueKind kind, string path, string propertyPath) : base(kind, RecordLocation.Asset, path) { SettingsKind = settingsKind; PropertyPath = propertyPath; }
protected SettingsIssueRecord(AssetSettingsKind settingsKind, IssueKind kind, string body) : base(kind, RecordLocation.Asset, null) { SettingsKind = settingsKind; bodyExtra = body; }
internal static SettingsIssueRecord Create(AssetSettingsKind settingsKind, IssueKind type, string path, string propertyPath) { return(new SettingsIssueRecord(settingsKind, type, path, propertyPath)); }
internal static SettingsIssueRecord Create(AssetSettingsKind settingsKind, IssueKind type, string body) { return(new SettingsIssueRecord(settingsKind, type, body)); }
private static string[] GetAssetsReferencedInPlayerSettingsAsset(string assetPath, AssetSettingsKind settingsKind) { var referencedAssets = new List <string>(); if (settingsKind == AssetSettingsKind.EditorBuildSettings) { referencedAssets.AddRange(CSSceneTools.GetScenesInBuild(true)); } else { var settingsAsset = AssetDatabase.LoadAllAssetsAtPath(assetPath); if (settingsAsset != null && settingsAsset.Length > 0) { var settingsAssetSerialized = new SerializedObject(settingsAsset[0]); var sp = settingsAssetSerialized.GetIterator(); while (sp.Next(true)) { if (sp.propertyType == SerializedPropertyType.ObjectReference) { var instanceId = sp.objectReferenceInstanceIDValue; if (instanceId != 0) { var path = CSPathTools.EnforceSlashes(AssetDatabase.GetAssetPath(instanceId)); if (!string.IsNullOrEmpty(path) && path.StartsWith("Assets")) { if (referencedAssets.IndexOf(path) == -1) { referencedAssets.Add(path); } } } } } } } return(referencedAssets.ToArray()); }
private static void FillSettingsAssetDependencies(ref HashSet <string> dependenciesGUIDs, string assetPath, AssetSettingsKind settingsKind) { if (settingsKind == AssetSettingsKind.EditorBuildSettings) { var scenesInBuildGUIDs = CSSceneTools.GetScenesInBuildGUIDs(true); if (scenesInBuildGUIDs != null) { dependenciesGUIDs.UnionWith(scenesInBuildGUIDs); } } else { var settingsAsset = AssetDatabase.LoadAllAssetsAtPath(assetPath); if (settingsAsset != null && settingsAsset.Length > 0) { var settingsAssetSerialized = new SerializedObject(settingsAsset[0]); var sp = settingsAssetSerialized.GetIterator(); while (sp.Next(true)) { if (sp.propertyType == SerializedPropertyType.ObjectReference) { var instanceId = sp.objectReferenceInstanceIDValue; if (instanceId != 0) { var path = CSPathTools.EnforceSlashes(AssetDatabase.GetAssetPath(instanceId)); if (!string.IsNullOrEmpty(path) && path.StartsWith("Assets")) { var guid = AssetDatabase.AssetPathToGUID(path); if (!string.IsNullOrEmpty(guid)) { dependenciesGUIDs.Add(guid); } } } } } } } }