# FMOD Integration and removed Timeline package

**URL:** <https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714>\
**Category:** Unity\
**Created:** [May 1, 2020, 7:22pm UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714 "2020-05-01T19:22:23Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Racot\_A](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/racot_a/32/362_2.png) [@Racot\_A](https://qa.fmod.com/u/Racot_A)\
**Post date:** [May 1, 2020, 7:22pm UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714/1 "2020-05-01T19:22:24Z")

</div>

Hello. I have some errors and missing libraries in FMOD Integrations scripts after removing the Timeline package.

Please handle the timeline package existing in the project.

 ![Screenshot_1](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/9/970b8f78738fc9b0cd90b5e7eda84261431c0257.png)

---

<div class="post-metadata">

**Author:** ![cameron-fmod](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/cameron-fmod/32/261_2.png) [@cameron-fmod](https://qa.fmod.com/u/cameron-fmod)\
**Post date:** [May 8, 2020, 12:41am UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714/2 "2020-05-08T00:41:53Z")

</div>

Thanks for the feedback.

How would you suggest that we check for this?

---

<div class="post-metadata">

**Author:** ![Racot\_A](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/racot_a/32/362_2.png) [@Racot\_A](https://qa.fmod.com/u/Racot_A)\
**Post date:** [May 8, 2020, 7:19am UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714/3 "2020-05-08T07:19:01Z")

</div>

Hi 😉  
You can use version defines [https://forum.unity.com/threads/how-to-programmatically-detect-if-package-x-is-installed-compilation-failing.677491/](https://forum.unity.com/threads/how-to-programmatically-detect-if-package-x-is-installed-compilation-failing.677491/)

InputSystem asmdef

 ![asmdef](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/3/36e259a52840b907365cc3c6877248e518169962.png)

For example, the New Input System check XR module existing in project like this:

 ![InputSystemCheckEnableXR](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/5/56cd98a118614afc31f7822923179a91cc89bf56.png)

---

<div class="post-metadata">

**Author:** ![cameron-fmod](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/cameron-fmod/32/261_2.png) [@cameron-fmod](https://qa.fmod.com/u/cameron-fmod)\
**Post date:** [May 18, 2020, 4:23am UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714/4 "2020-05-18T04:23:31Z")

</div>

I haven’t been able to find a Unity define for Timeline specifically but I will make a task to look into this further.

---

<div class="post-metadata">

**Author:** ![Racot\_A](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/racot_a/32/362_2.png) [@Racot\_A](https://qa.fmod.com/u/Racot_A)\
**Post date:** [May 18, 2020, 9:24am UTC](https://qa.fmod.com/t/fmod-integration-and-removed-timeline-package/15714/5 "2020-05-18T09:24:26Z")

</div>

Hello.  
In another way, you can add your own define in project settings. This new define is added if you find the assembly name “Unity.Timeline”  
I write a simple script (FMODStartup.cs) to check “Unity.Timeline” assembly in the project after compilation and add or remove custom UNITY\_TIMELINE\_EXIST define in project settings

```
[InitializeOnLoad]
public class FMODStartup {
    
    static FMODStartup()
    {
        Assembly[] playerAssemblies = CompilationPipeline.GetAssemblies(AssembliesType.Player);
        
        var timeLineAssemblyIndex = Array.FindIndex(playerAssemblies,
            assembly => assembly.name == "Unity.Timeline");
        
        if (timeLineAssemblyIndex >= 0)
        {
            PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, "UNITY_TIMELINE_EXIST");
        }
        else
        {
            var definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup ( EditorUserBuildSettings.selectedBuildTargetGroup );
            definesString.Replace("UNITY_TIMELINE_EXIST", "");
            PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, definesString);
        }
    }
}

```

After that, I added a simple playable asset script with custom define “UNITY\_TIMELINE\_EXIST”

```
#if UNITY_TIMELINE_EXIST
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;

public class TestTimeline : PlayableAsset, ITimelineClipAsset
{
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        return new Playable();
    }

    public ClipCaps clipCaps { get; }
}
#endif

```

And its work! We check to exist of timeline assembly and of/on scripts logic.

* * *

Also, you can use PackageManager API for search package and check installed status

```
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;

[InitializeOnLoad]
public class FMODStartup
{
    private static SearchRequest _searchRequest;
    
    static FMODStartup()
    {
        _searchRequest = Client.Search("com.unity.timeline", true);
        EditorApplication.update += PackageSearchProgress;
        EditorApplication.LockReloadAssemblies();
    }

    private static void PackageSearchProgress()
    {
        if (_searchRequest.IsCompleted)
        {
            Debug.LogError($"+++++:{_searchRequest.Status}");
            EditorApplication.update -= PackageSearchProgress;
            EditorApplication.UnlockReloadAssemblies();
        }
    }
}
```
