public void ApplyValues()
    {
        string actuGraphicSCOPath = AssetDatabase.GetAssetPath(Balancing_SCO);
        object graphicSCOAsset    = graphic_SCO != null || graphic_SCO != tempGraphic_SCO?AssetDatabase.LoadAssetAtPath(actuGraphicSCOPath, typeof(ArtTweekScriptableObject)) as object : null;

        string actuBalancingSCOPath = AssetDatabase.GetAssetPath(Balancing_SCO);
        object BalancingSCOAsset    = Balancing_SCO != null || Balancing_SCO != tempBalancing_SCO?AssetDatabase.LoadAssetAtPath(actuBalancingSCOPath, typeof(GameplayTweekScriptableObject)) as object : null;

        string actuSoundSCOPath = AssetDatabase.GetAssetPath(Balancing_SCO);
        object soundSCOAsset    = sound_SCO != null || sound_SCO != tempSound_SCO?AssetDatabase.LoadAssetAtPath(actuSoundSCOPath, typeof(SoundTweekScriptableObject)) as object : null;

        TweekCore.LaunchValuesApplication(BalancingSCOAsset, graphicSCOAsset, soundSCOAsset);
    }
    private void OnGUI()
    {
        //Si je perd la référence (SCO supprimé)
        if (graphic_SCO == null || Balancing_SCO == null || sound_SCO == null)
        {
            graphic_SCO   = tempGraphic_SCO;
            Balancing_SCO = tempBalancing_SCO;
            sound_SCO     = tempSound_SCO;
        }
        //Si la valeur Change
        if (lastGraphic_SCO != graphic_SCO || lastBalancing_SCO != Balancing_SCO || lastSound_SCO != sound_SCO)
        {
            ReDrawSCOEditors();
        }

        //ReCalcSCO on Projet
        using (new GUILayout.VerticalScope(EditorStyles.helpBox))
        {
            float _minWidth = 90;
            float _height   = 30;
            //All SCO Rebuild
            if (GUILayout.Button("Rebuild All SCO for Project", GUILayout.MinWidth(_minWidth * 3), GUILayout.Height(_height)))
            {
                isCompilling = true;
                TweekCore.LaunchScoUpdate(TweekCore.ScoUpdateMode.Global);
            }
            using (new GUILayout.HorizontalScope())
            {
                //Graphic SCO Rebuild
                if (GUILayout.Button("Rebuild only Graphic", GUILayout.MinWidth(_minWidth), GUILayout.Height(_height)))
                {
                    isCompilling = true;
                    TweekCore.LaunchScoUpdate(TweekCore.ScoUpdateMode.Art);
                }
                //Balancing SCO Rebuild
                if (GUILayout.Button("Rebuild only Balancing", GUILayout.MinWidth(_minWidth), GUILayout.Height(_height)))
                {
                    isCompilling = true;
                    TweekCore.LaunchScoUpdate(TweekCore.ScoUpdateMode.Gameplay);
                }
                //Sound SCO Rebuild
                if (GUILayout.Button("Rebuild only Sound", GUILayout.MinWidth(_minWidth), GUILayout.Height(_height)))
                {
                    isCompilling = true;
                    TweekCore.LaunchScoUpdate(TweekCore.ScoUpdateMode.Sound);
                }
            }
        }

        //Zone Input du SCO à edit
        using (new GUILayout.VerticalScope(EditorStyles.helpBox))
        {
            float _width = 140;
            //Graphic Emplacement
            using (new GUILayout.HorizontalScope())
            {
                //Nom
                GUILayout.Label("graphic_SCO", actualMode == Mode.Graphic ? EditorStyles.boldLabel : EditorStyles.label, GUILayout.Width(_width));
                //Scriptable Object
                graphic_SCO = (ArtTweekScriptableObject)EditorGUILayout.ObjectField(graphic_SCO, typeof(ArtTweekScriptableObject), false);
                //Button New SCO
                if (GUILayout.Button("New", GUILayout.Width(60)))
                {
                    GenerateNewSco <ArtTweekScriptableObject>(tempGraphic_SCO, Mode.Graphic);
                }
            }
            //Balancing Emplacement
            using (new GUILayout.HorizontalScope())
            {
                //Nom
                GUILayout.Label("Balancing_SCO", actualMode == Mode.Balancing ? EditorStyles.boldLabel : EditorStyles.label, GUILayout.Width(_width));
                //Scriptable Object
                Balancing_SCO = (GameplayTweekScriptableObject)EditorGUILayout.ObjectField(Balancing_SCO, typeof(GameplayTweekScriptableObject), false);
                //Button New SCO
                if (GUILayout.Button("New", GUILayout.Width(60)))
                {
                    GenerateNewSco <GameplayTweekScriptableObject>(tempBalancing_SCO, Mode.Balancing);
                }
            }
            //Sound Emplacement
            using (new GUILayout.HorizontalScope())
            {
                //Nom
                GUILayout.Label("sound_SCO", actualMode == Mode.Audio ? EditorStyles.boldLabel : EditorStyles.label, GUILayout.Width(_width));
                //Scriptable Object
                sound_SCO = (SoundTweekScriptableObject)EditorGUILayout.ObjectField(sound_SCO, typeof(SoundTweekScriptableObject), false);
                //Button New SCO
                if (GUILayout.Button("New", GUILayout.Width(60)))
                {
                    GenerateNewSco <SoundTweekScriptableObject>(tempSound_SCO, Mode.Audio);
                }
            }
        }
        GUILayout.Space(10);

        GUILayout.Label("Mode");
        using (new GUILayout.HorizontalScope())
        {
            ModeButton("Graphic", Mode.Graphic);
            ModeButton("Equilibrage", Mode.Balancing);
            ModeButton("Sound", Mode.Audio);
        }

        //Debug show in what mode i am
        GUILayout.Label(actualMode.ToString(), EditorStyles.helpBox);

        //Draw SCO Information
        if (!isCompilling)
        {
            //Draw SCO Information
            using (var scrollViewScope = new GUILayout.ScrollViewScope(scrollPosition, EditorStyles.helpBox))
            {
                scrollPosition = scrollViewScope.scrollPosition;

                switch (actualMode)
                {
                case Mode.None:
                    GUILayout.Label("Select a mode");
                    break;

                case Mode.Graphic:
                    graphic_SCOEditor.OnInspectorGUI();
                    break;

                case Mode.Balancing:
                    Balancing_SCOEditor.OnInspectorGUI();
                    break;

                case Mode.Audio:
                    sound_SCOEditor.OnInspectorGUI();
                    break;

                default:
                    GUILayout.TextField("!!!Error!!!");
                    break;
                }
            }
        }
        else
        {
            actualMode = Mode.None;
            GUILayout.Label("The Scriptables Objects are compilling, please wait");
            GUILayout.Space(20);
            GUILayout.Label("Fun Fact : " +
                            "\n Arthur essaie de vous divertir en attendant de pouvoir travailler" +
                            "\n " +
                            "\n J'espère que ça ne va pas être le giga rush en fin de projet, " +
                            "\n si c'est le cas... bah RIP" +
                            "\n TRAVAIL PLUS VITE !!!" +
                            "\n " +
                            "\n Nan je déconne, faut attendre que ça recompille" +
                            "\n " +
                            "\n Imagine une petite musique d'ascenseur ");
        }

        GUILayout.FlexibleSpace();
        GUILayout.Space(20);
        if (GUILayout.Button("ApplyValue", GUILayout.Height(30)))
        {
            ApplyValues();
        }
    }