public override void OnInspectorGUI() { Settings settings = target as Settings; EditorGUI.BeginChangeCheck(); hasBankSourceChanged = false; bool hasBankTargetChanged = false; GUIStyle style = new GUIStyle(GUI.skin.label); style.richText = true; GUI.skin.FindStyle("HelpBox").richText = true; int sourceType = settings.HasSourceProject ? 0 : (settings.HasPlatforms ? 2 : 1); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); sourceType = GUILayout.Toggle(sourceType == 0, "Project", "Button") ? 0 : sourceType; sourceType = GUILayout.Toggle(sourceType == 1, "Single Platform Build", "Button") ? 1 : sourceType; sourceType = GUILayout.Toggle(sourceType == 2, "Multiple Platform Build", "Button") ? 2 : sourceType; EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.HelpBox( "<size=11>Select the way you wish to connect Unity to the FMOD Studio content:\n" + "<b>• Project</b>\t\tIf you have the complete FMOD Studio project avaliable\n" + "<b>• Single Platform</b>\tIf you have only the contents of the <i>Build</i> folder for a single platform\n" + "<b>• Multiple Platforms</b>\tIf you have only the contents of the <i>Build</i> folder for multiple platforms, each platform in it's own sub directory\n" + "</size>" , MessageType.Info, true); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); if (sourceType == 0) { EditorGUILayout.BeginHorizontal(); string oldPath = settings.SourceProjectPathUnformatted; EditorGUILayout.PrefixLabel("Studio Project Path", GUI.skin.textField, style); EditorGUI.BeginChangeCheck(); settings.SourceProjectPathUnformatted = EditorGUILayout.TextField(GUIContent.none, settings.SourceProjectPathUnformatted); if (EditorGUI.EndChangeCheck()) { settings.SourceProjectPath = settings.SourceProjectPathUnformatted; } if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) { GUI.FocusControl(null); string path = EditorUtility.OpenFilePanel("Locate Studio Project", oldPath, "fspro"); if (!String.IsNullOrEmpty(path)) { path = MakePathRelativeToProject(path); settings.SourceProjectPathUnformatted = path; settings.SourceProjectPath = path; this.Repaint(); } } EditorGUILayout.EndHorizontal(); // Cache in settings for runtime access in play-in-editor mode string bankPath = EditorUtils.GetBankDirectoryUnformatted(); settings.SourceBankPathUnformatted = bankPath; settings.SourceBankPath = bankPath; settings.HasPlatforms = true; settings.HasSourceProject = true; // First time project path is set or changes, copy to streaming assets if (settings.SourceProjectPathUnformatted != oldPath) { hasBankSourceChanged = true; } } if (sourceType == 1 || sourceType == 2) { EditorGUILayout.BeginHorizontal(); string oldPath = settings.SourceBankPathUnformatted; EditorGUILayout.PrefixLabel("Build Path", GUI.skin.textField, style); EditorGUI.BeginChangeCheck(); settings.SourceBankPathUnformatted = EditorGUILayout.TextField(GUIContent.none, settings.SourceBankPathUnformatted); if (EditorGUI.EndChangeCheck()) { settings.SourceBankPath = settings.SourceBankPathUnformatted; } if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) { GUI.FocusControl(null); var path = EditorUtility.OpenFolderPanel("Locate Build Folder", oldPath, null); if (!String.IsNullOrEmpty(path)) { path = MakePathRelativeToProject(path); settings.SourceBankPathUnformatted = path; settings.SourceBankPath = path; } } EditorGUILayout.EndHorizontal(); settings.HasPlatforms = (sourceType == 2); settings.HasSourceProject = false; // First time project path is set or changes, copy to streaming assets if (settings.SourceBankPathUnformatted != oldPath) { hasBankSourceChanged = true; } } if ((settings.HasSourceProject && !settings.SourceProjectPathUnformatted.Equals(settings.SourceProjectPath)) || (sourceType >= 1 && !settings.SourceBankPathUnformatted.Equals(settings.SourceBankPath))) { EditorGUI.BeginDisabledGroup(true); EditorGUILayout.TextField("Platform specific path", sourceType >= 1 ? settings.SourceBankPath : settings.SourceProjectPath); EditorGUI.EndDisabledGroup(); } bool validBanks; string failReason; EditorUtils.ValidateSource(out validBanks, out failReason); if (!validBanks) { EditorGUILayout.HelpBox(failReason, MessageType.Error, true); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(settings); } return; } ImportType importType = (ImportType)EditorGUILayout.EnumPopup("Import Type", settings.ImportType); if (importType != settings.ImportType) { hasBankTargetChanged = true; settings.ImportType = importType; } EditorGUI.BeginDisabledGroup(settings.ImportType == ImportType.StreamingAssets); string targetAssetPath = EditorGUILayout.TextField("FMOD Asset Folder", settings.TargetAssetPath); if (targetAssetPath != settings.TargetAssetPath) { settings.TargetAssetPath = targetAssetPath; hasBankTargetChanged = true; } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(settings.ImportType == ImportType.AssetBundle); // ----- Loading ----------------- EditorGUILayout.Separator(); EditorGUILayout.LabelField("<b>Loading</b>", style); EditorGUI.indentLevel++; settings.AutomaticEventLoading = EditorGUILayout.Toggle("Load All Event Data at Initialization", settings.AutomaticEventLoading); EditorGUI.BeginDisabledGroup(!settings.AutomaticEventLoading); settings.AutomaticSampleLoading = EditorGUILayout.Toggle("Load All Sample Data at Initialization", settings.AutomaticSampleLoading); EditorGUI.EndDisabledGroup(); EditorGUI.indentLevel--; EditorGUI.EndDisabledGroup(); // ----- PIE ---------------------------------------------- EditorGUILayout.Separator(); EditorGUILayout.LabelField("<b>Play In Editor Settings</b>", style); EditorGUI.indentLevel++; DisplayEditorBool("Live Update", settings.LiveUpdateSettings, FMODPlatform.PlayInEditor); if (settings.IsLiveUpdateEnabled(FMODPlatform.PlayInEditor)) { #if UNITY_5_0 || UNITY_5_1 EditorGUILayout.HelpBox("Unity 5.0 or 5.1 detected: Live update will listen on port <b>9265</b>", MessageType.Warning, false); #else EditorGUILayout.HelpBox("Live update will listen on port <b>9264</b>", MessageType.Info, false); #endif } DisplayEditorBool("Debug Overlay", settings.OverlaySettings, FMODPlatform.PlayInEditor); DisplayChildFreq("Sample Rate", settings.SampleRateSettings, FMODPlatform.PlayInEditor); if (settings.HasPlatforms) { DisplayPIEBuildDirectory("Bank Platform", settings.BankDirectorySettings, FMODPlatform.PlayInEditor); } DisplayPIESpeakerMode("Speaker Mode", settings.SpeakerModeSettings, FMODPlatform.PlayInEditor); if (settings.HasPlatforms) { EditorGUILayout.HelpBox(String.Format("Match the speaker mode to the setting of the platform <b>{0}</b> inside FMOD Studio", settings.GetBankPlatform(FMODPlatform.PlayInEditor)), MessageType.Info, false); } else { EditorGUILayout.HelpBox("Match the speaker mode to the setting inside FMOD Studio", MessageType.Info, false); } EditorGUI.indentLevel--; // ----- Default ---------------------------------------------- EditorGUILayout.Separator(); EditorGUILayout.LabelField("<b>Default Settings</b>", style); EditorGUI.indentLevel++; DisplayParentBool("Live Update", settings.LiveUpdateSettings, FMODPlatform.Default); if (settings.IsLiveUpdateEnabled(FMODPlatform.Default)) { #if UNITY_5_0 || UNITY_5_1 EditorGUILayout.HelpBox("Unity 5.0 or 5.1 detected: Live update will listen on port <b>9265</b>", MessageType.Warning, false); #else EditorGUILayout.HelpBox("Live update will listen on port <b>9264</b>", MessageType.Info, false); #endif } DisplayParentBool("Debug Overlay", settings.OverlaySettings, FMODPlatform.Default); DisplayParentFreq("Sample Rate", settings.SampleRateSettings, FMODPlatform.Default); if (settings.HasPlatforms) { bool prevChanged = GUI.changed; DisplayParentBuildDirectory("Bank Platform", settings.BankDirectorySettings, FMODPlatform.Default); hasBankSourceChanged |= !prevChanged && GUI.changed; } DisplayParentSpeakerMode("Speaker Mode", settings.SpeakerModeSettings, FMODPlatform.Default); if (settings.HasPlatforms) { EditorGUILayout.HelpBox(String.Format("Match the speaker mode to the setting of the platform <b>{0}</b> inside FMOD Studio", settings.GetBankPlatform(FMODPlatform.Default)), MessageType.Info, false); } else { EditorGUILayout.HelpBox("Match the speaker mode to the setting inside FMOD Studio", MessageType.Info, false); } DisplayParentInt("Virtual Channel Count", settings.VirtualChannelSettings, FMODPlatform.Default, 1, 2048); DisplayParentInt("Real Channel Count", settings.RealChannelSettings, FMODPlatform.Default, 1, 256); EditorGUI.indentLevel--; // ----- Plugins ---------------------------------------------- EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("<b>Plugins</b>", GUI.skin.button, style); if (GUILayout.Button("Add Plugin", GUILayout.ExpandWidth(false))) { settings.Plugins.Add(""); } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel++; for (int count = 0; count < settings.Plugins.Count; count++) { EditorGUILayout.BeginHorizontal(); settings.Plugins[count] = EditorGUILayout.TextField("Plugin " + (count + 1).ToString() + ":", settings.Plugins[count]); if (GUILayout.Button("Delete Plugin", GUILayout.ExpandWidth(false))) { settings.Plugins.RemoveAt(count); } EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; // ----- Windows ---------------------------------------------- DisplayPlatform(FMODPlatform.Desktop, null); DisplayPlatform(FMODPlatform.Mobile, new FMODPlatform[] { FMODPlatform.MobileHigh, FMODPlatform.MobileLow, FMODPlatform.PSVita, FMODPlatform.AppleTV }); DisplayPlatform(FMODPlatform.Console, new FMODPlatform[] { FMODPlatform.XboxOne, FMODPlatform.PS4, FMODPlatform.WiiU }); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(settings); } if (hasBankSourceChanged) { EventManager.UpdateCache(); } if (hasBankTargetChanged) { EventManager.CopyToStreamingAssets(); } }
public override void OnInspectorGUI() { var begin = serializedObject.FindProperty("PlayEvent"); var end = serializedObject.FindProperty("StopEvent"); var tag = serializedObject.FindProperty("CollisionTag"); var eventReference = serializedObject.FindProperty("EventReference"); var eventPath = eventReference.FindPropertyRelative("Path"); var fadeout = serializedObject.FindProperty("AllowFadeout"); var once = serializedObject.FindProperty("TriggerOnce"); var preload = serializedObject.FindProperty("Preload"); var overrideAtt = serializedObject.FindProperty("OverrideAttenuation"); var minDistance = serializedObject.FindProperty("OverrideMinDistance"); var maxDistance = serializedObject.FindProperty("OverrideMaxDistance"); EditorGUILayout.PropertyField(begin, new GUIContent("Play Event")); EditorGUILayout.PropertyField(end, new GUIContent("Stop Event")); if ((begin.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && begin.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) || (end.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && end.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D)) { tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); } EditorGUI.BeginChangeCheck(); const string EventReferenceLabel = "Event"; EditorUtils.DrawLegacyEvent(serializedObject.FindProperty("Event"), EventReferenceLabel); EditorGUILayout.PropertyField(eventReference, new GUIContent(EventReferenceLabel)); EditorEventRef editorEvent = EventManager.EventFromPath(eventPath.stringValue); if (EditorGUI.EndChangeCheck()) { EditorUtils.UpdateParamsOnEmitter(serializedObject, eventPath.stringValue); } // Attenuation if (editorEvent != null) { { EditorGUI.BeginDisabledGroup(editorEvent == null || !editorEvent.Is3D); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(overrideAtt); if (EditorGUI.EndChangeCheck() || (minDistance.floatValue == -1 && maxDistance.floatValue == -1) // never been initialiased ) { minDistance.floatValue = editorEvent.MinDistance; maxDistance.floatValue = editorEvent.MaxDistance; } EditorGUI.BeginDisabledGroup(!overrideAtt.boolValue); EditorGUIUtility.labelWidth = 30; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(minDistance, new GUIContent("Min")); if (EditorGUI.EndChangeCheck()) { minDistance.floatValue = Mathf.Clamp(minDistance.floatValue, 0, maxDistance.floatValue); } EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(maxDistance, new GUIContent("Max")); if (EditorGUI.EndChangeCheck()) { maxDistance.floatValue = Mathf.Max(minDistance.floatValue, maxDistance.floatValue); } EditorGUIUtility.labelWidth = 0; EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); } parameterValueView.OnGUI(editorEvent, !eventReference.hasMultipleDifferentValues); fadeout.isExpanded = EditorGUILayout.Foldout(fadeout.isExpanded, "Advanced Controls"); if (fadeout.isExpanded) { EditorGUILayout.PropertyField(preload, new GUIContent("Preload Sample Data")); EditorGUILayout.PropertyField(fadeout, new GUIContent("Allow Fadeout When Stopping")); EditorGUILayout.PropertyField(once, new GUIContent("Trigger Once")); } } serializedObject.ApplyModifiedProperties(); }