0

FMOD for Unity 2.01.07 (Unity 2019.4.18f1 - running on MacOS Catalina) seems to have broken their FMODStudioSettings class.

I can't save in the editor without getting these errors:

FMOD: Cleaning up duplicate platform: ID  = playInEditor, name = 'Play In Editor Settings', type = PlatformPlayInEditor
ArgumentException: An item with the same key has already been added. Key: playInEditor
FMOD: Cleaning up duplicate platform: ID  = default, name = 'Default Settings', type = PlatformDefault
ArgumentException: An item with the same key has already been added. Key: default
NullReferenceException: Object reference not set to an instance of an object
FMODUnity.SettingsEditor.DisplayPlugins (System.String title, FMODUnity.Platform platform, FMODUnity.Platform+PropertyAccessor`1[T] property, System.Collections.Generic.Dictionary`2[TKey,TValue] expandState, System.String warning) (at Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs:1028)

I believe this is a regression that basically makes the Unity integration unusable. Something to do with de-duplicating platforms in the Platforms map. At runtime there's a series of NPEs related to platforms so actually I can't run the game properly. Has anyone else run into this?

I'm evaluating FMOD as a middleware option for our game, and have run into at least two serious bugs in the Unity integration. See other bug here.

UPDATE:

I haven't found out why this doesn't happen for everyone, but an easy fix for anyone else running into this issue has been applying this diff:

diff --git a/Assets/Plugins/FMOD/src/Runtime/Settings.cs b/Assets/Plugins/FMOD/src/Runtime/Settings.cs
index 2641e926..c2843145 100644
--- a/Assets/Plugins/FMOD/src/Runtime/Settings.cs
+++ b/Assets/Plugins/FMOD/src/Runtime/Settings.cs
@@ -817,6 +817,10 @@ namespace FMODUnity
 
         private void PopulatePlatformsFromAsset()
         {
+            Platforms.Clear();
+            PlatformForBuildTarget.Clear();
+            PlatformForRuntimePlatform.Clear();
+
 #if UNITY_EDITOR
             string assetPath = AssetDatabase.GetAssetPath(this);
             UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(assetPath);
@@ -827,36 +831,8 @@ namespace FMODUnity
 
             foreach (Platform newPlatform in assetPlatforms)
             {
-                Platform existingPlatform = FindPlatform(newPlatform.Identifier);
-
-                if (existingPlatform != null)
-                {
-                    // Duplicate platform; clean one of them up
-                    Platform platformToDestroy;
-
-                    if (newPlatform.Active && !existingPlatform.Active)
-                    {
-                        Platforms.Remove(existingPlatform.Identifier);
-
-                        platformToDestroy = existingPlatform;
-                        existingPlatform = null;
-                    }
-                    else
-                    {
-                        platformToDestroy = newPlatform;
-                    }
-
-                    Debug.LogWarningFormat("FMOD: Cleaning up duplicate platform: ID  = {0}, name = '{1}', type = {2}",
-                        platformToDestroy.Identifier, platformToDestroy.DisplayName, platformToDestroy.GetType().Name);
-
-                    DestroyImmediate(platformToDestroy, true);
-                }
-
-                if (existingPlatform == null)
-                {
-                    newPlatform.EnsurePropertiesAreValid();
-                    Platforms.Add(newPlatform.Identifier, newPlatform);
-                }
+                newPlatform.EnsurePropertiesAreValid();
+                Platforms.Add(newPlatform.Identifier, newPlatform);
             }
 
 #if UNITY_EDITOR

1 Answer 1

0

So this was a bug in the integration they fixed in 2.01.10.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.