diff --git a/Runtime/Scripts/Extensions/DracoImport.cs b/Runtime/Scripts/Extensions/DracoImport.cs index ae959668d..439a66ae6 100644 --- a/Runtime/Scripts/Extensions/DracoImport.cs +++ b/Runtime/Scripts/Extensions/DracoImport.cs @@ -10,6 +10,10 @@ public override GltfImportPluginContext CreateInstance(GLTFImportContext context { return new DracoImportContext(); } + +#if !HAVE_DRACO + public override string Warning => "Please add the package \"com.atteneder.draco\" to your project for Draco mesh compression support."; +#endif } public class DracoImportContext: GltfImportPluginContext diff --git a/Runtime/Scripts/Extensions/Ktx2Import.cs b/Runtime/Scripts/Extensions/Ktx2Import.cs index 5c03778b6..8b8f21dfb 100644 --- a/Runtime/Scripts/Extensions/Ktx2Import.cs +++ b/Runtime/Scripts/Extensions/Ktx2Import.cs @@ -10,6 +10,10 @@ public override GltfImportPluginContext CreateInstance(GLTFImportContext context { return new Ktx2ImportContext(); } + +#if !HAVE_KTX + public override string Warning => "Please add the package \"com.atteneder.ktx\" version v1.3+ to your project for KTX2 texture support."; +#endif } public class Ktx2ImportContext: GltfImportPluginContext diff --git a/Runtime/Scripts/Extensions/MeshoptImport.cs b/Runtime/Scripts/Extensions/MeshoptImport.cs index dd55200aa..cec2e6aa7 100644 --- a/Runtime/Scripts/Extensions/MeshoptImport.cs +++ b/Runtime/Scripts/Extensions/MeshoptImport.cs @@ -10,6 +10,10 @@ public override GltfImportPluginContext CreateInstance(GLTFImportContext context { return new MeshoptImportContext(); } + +#if !HAVE_MESHOPT_DECOMPRESS + public override string Warning => "Please add the package \"com.unity.meshopt.decompress\" to your project for Meshopt compression support."; +#endif } public class MeshoptImportContext: GltfImportPluginContext diff --git a/Runtime/Scripts/GLTFSettings.cs b/Runtime/Scripts/GLTFSettings.cs index dd80ec637..66c6926d6 100644 --- a/Runtime/Scripts/GLTFSettings.cs +++ b/Runtime/Scripts/GLTFSettings.cs @@ -129,7 +129,22 @@ internal static void OnPluginsGUI(IEnumerable plugins) { plugin.Enabled = GUILayout.Toggle(plugin.Enabled, "", GUILayout.Width(12)); var label = new GUIContent(displayName, plugin.Description); + EditorGUI.BeginDisabledGroup(!plugin.Enabled); var expanded2 = EditorGUILayout.Foldout(expanded, label); + + if (plugin.Enabled && !string.IsNullOrEmpty(plugin.Warning)) + { + // calculate space that the label needed + var labelSize = EditorStyles.foldout.CalcSize(label); + var warningIcon = EditorGUIUtility.IconContent("console.warnicon.sml"); + warningIcon.tooltip = plugin.Warning; + // show warning if needed + var lastRect = GUILayoutUtility.GetLastRect(); + var warningRect = new Rect(lastRect.x + labelSize.x + 4, lastRect.y, 32, 16); + EditorGUI.LabelField(warningRect, warningIcon); + } + + EditorGUI.EndDisabledGroup(); if (expanded2 != expanded) { expanded = expanded2; @@ -140,6 +155,8 @@ internal static void OnPluginsGUI(IEnumerable plugins) { EditorGUI.indentLevel += 1; EditorGUILayout.HelpBox(plugin.Description, MessageType.None); + if (!string.IsNullOrEmpty(plugin.Warning)) + EditorGUILayout.HelpBox(plugin.Warning, MessageType.Warning); EditorGUI.BeginDisabledGroup(!plugin.Enabled); editorCache.TryGetValue(plugin.GetType(), out var editor); Editor.CreateCachedEditor(plugin, null, ref editor); diff --git a/Runtime/Scripts/Plugins/GltfPlugin.cs b/Runtime/Scripts/Plugins/GltfPlugin.cs index 592ca1ce7..bd669bb47 100644 --- a/Runtime/Scripts/Plugins/GltfPlugin.cs +++ b/Runtime/Scripts/Plugins/GltfPlugin.cs @@ -6,7 +6,8 @@ public abstract class GltfPlugin: ScriptableObject { public abstract string DisplayName { get; } public abstract string Description { get; } - public virtual string HelpUrl => ""; + public virtual string HelpUrl => null; public bool Enabled { get; set; } = true; + public virtual string Warning => null; } } \ No newline at end of file