public static void CreateVolumeSlider()
        {
            //Check if canvas exist in the scene
            Canvas canvas = FindObjectOfType <Canvas>();

            if (canvas == null)
            {
                GameObject newCanvas = new GameObject("Canvas");

                Canvas canvasComponent = newCanvas.AddComponent <Canvas>();
                canvasComponent.renderMode = RenderMode.ScreenSpaceOverlay;

                newCanvas.AddComponent <CanvasScaler>();
                newCanvas.AddComponent <GraphicRaycaster>();

                canvas = canvasComponent;
            }

            //Creation of the Volume Slider GameObject
            GameObject   volumeSliderGO = new GameObject("VolumeSlider");
            VolumeSlider volumeSlider   = volumeSliderGO.AddComponent <VolumeSlider>();

            volumeSliderGO.transform.SetParent(canvas.transform);
            volumeSliderGO.transform.localPosition = Vector3.zero;

            RectTransform volumeSliderRectTransform = volumeSliderGO.GetComponent <RectTransform>();

            volumeSliderRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 160f);
            volumeSliderRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 20f);

            //Creation of the slider GameObject components
            //Background
            GameObject background = new GameObject("Background");

            GameObjectUtility.SetParentAndAlign(background, volumeSliderGO);

            RectTransform backgroundRectTransform = background.AddComponent <RectTransform>();

            backgroundRectTransform.anchorMin = new Vector2(0f, 0.25f);
            backgroundRectTransform.anchorMax = new Vector2(1f, 0.75f);
            backgroundRectTransform.offsetMin = new Vector2(0f, 0f);
            backgroundRectTransform.offsetMax = new Vector2(0f, 0f);

            //Get the default background from unity
            Image backgroundImage = background.AddComponent <Image>();

            backgroundImage.sprite = AssetDatabase.GetBuiltinExtraResource <Sprite>("UI/Skin/Background.psd");
            backgroundImage.type   = Image.Type.Sliced;


            //Fill Area
            GameObject fillArea = new GameObject("Fill Area");

            GameObjectUtility.SetParentAndAlign(fillArea, volumeSliderGO);

            RectTransform fillAreaRectTransform = fillArea.AddComponent <RectTransform>();

            fillAreaRectTransform.anchorMin        = new Vector2(0f, 0.25f);
            fillAreaRectTransform.anchorMax        = new Vector2(1f, 0.75f);
            fillAreaRectTransform.anchoredPosition = new Vector2(-5f, 0f);
            fillAreaRectTransform.sizeDelta        = new Vector2(-20f, 0f);


            //Fill
            GameObject fill = new GameObject("Fill");

            GameObjectUtility.SetParentAndAlign(fill, fillArea);

            RectTransform fillRectTransform = fill.AddComponent <RectTransform>();

            fillRectTransform.anchorMin = new Vector2(0f, 0f);
            fillRectTransform.anchorMax = new Vector2(0f, 1f);
            fillRectTransform.sizeDelta = new Vector2(10f, 0f);

            //Set the fillImage sprite with the default unity UISprite
            Image fillImage = fill.AddComponent <Image>();

            fillImage.sprite = AssetDatabase.GetBuiltinExtraResource <Sprite>("UI/Skin/UISprite.psd");
            fillImage.type   = Image.Type.Sliced;


            //Handle Slide Area
            GameObject handleSlideArea = new GameObject("Handle Slide Area");

            GameObjectUtility.SetParentAndAlign(handleSlideArea, volumeSliderGO);

            RectTransform handleSlideAreaRectTransform = handleSlideArea.AddComponent <RectTransform>();

            handleSlideAreaRectTransform.anchorMin = new Vector2(0f, 0f);
            handleSlideAreaRectTransform.anchorMax = new Vector2(1f, 1f);
            handleSlideAreaRectTransform.offsetMin = new Vector2(10f, 0f);
            handleSlideAreaRectTransform.offsetMax = new Vector2(-10f, 0f);


            //Handle
            GameObject handle = new GameObject("Handle");

            GameObjectUtility.SetParentAndAlign(handle, handleSlideArea);
            RectTransform handleRectTransform = handle.AddComponent <RectTransform>();

            handleRectTransform.anchorMin = new Vector2(0f, 0f);
            handleRectTransform.anchorMax = new Vector2(0f, 1f);
            handleRectTransform.sizeDelta = new Vector2(20f, 0f);

            //Setting the fillImage sprite with the default unity UISprite
            Image handleImage = handle.AddComponent <Image>();

            handleImage.sprite = AssetDatabase.GetBuiltinExtraResource <Sprite>("UI/Skin/Knob.psd");


            //Prepare the VolumeSlider script
            volumeSlider.targetGraphic = handleImage;
            volumeSlider.fillRect      = fillRectTransform;
            volumeSlider.handleRect    = handleRectTransform;
            volumeSlider.minValue      = -80f;
            volumeSlider.maxValue      = 20f;
            volumeSlider.value         = 0f;
        }
 public void Awake()
 {
     serializedProperty = serializedObject.FindProperty("enumSelected");
     volumeSlider       = (VolumeSlider)target;
     volumeSlider.InitSoundTypeEnum();
 }