在 Unity 中制作音量滑块

Making volume slider in Unity

游戏开始,音乐开始播放,但是太烦人了,想静音或者调小点。像游戏一样,有设置菜单,我觉得下个场景应该不错,我想把滑块放在那里。 但是我有错误。

脚本:

using UnityEngine;
using System.Collections;

public class Music : MonoBehaviour
{
    void Awake()
    {
        DontDestroyOnLoad(transform.gameObject);
    }

    public AudioClip[] soundtrack;

    // Use this for initialization
    void Start()
    {
        if (!GetComponent<AudioSource>().playOnAwake)
        {
            GetComponent<AudioSource>().clip = soundtrack[Random.Range(0, soundtrack.Length)];
            GetComponent<AudioSource>().Play();
        }
    }

// Update is called once per frame
    void Update()
    {
        if (!GetComponent<AudioSource>().isPlaying)
        {
            GetComponent<AudioSource>().clip = soundtrack[Random.Range(0, soundtrack.Length)];
            GetComponent<AudioSource>().Play();
        }
    }
}

您使用 AudioSource.volume 来改变音量。当你创建一个Slider时,你可以用Slider.value得到滑块的value。因此,取 Slider.value 并将其分配给 AudioSource.volume.

要创建滑块,转到GameObject->UI->Slider。确保 Min Value0 并且 Max Value1。还要确保未选中 Whole Numbers 复选框。将 Slider 从编辑器拖到此脚本中的卷 Slider 插槽。

:

如果您打算多次使用一个组件,请将其缓存到全局变量中,而不是多次执行 GetComponent<AudioSource>() 或在 Update() 函数中使用它。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Music : MonoBehaviour
{
    public AudioClip[] soundtrack;
    public Slider volumeSlider;

    AudioSource audioSource;


    void Awake()
    {
        DontDestroyOnLoad(transform.gameObject);
    }

    // Use this for initialization
    void Start()
    {
        audioSource = GetComponent<AudioSource>();

        if (!audioSource.playOnAwake)
        {
            audioSource.clip = soundtrack[Random.Range(0, soundtrack.Length)];
            audioSource.Play();
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (!audioSource.isPlaying)
        {
            audioSource.clip = soundtrack[Random.Range(0, soundtrack.Length)];
            audioSource.Play();
        }
    }

    void OnEnable()
    {
        //Register Slider Events
        volumeSlider.onValueChanged.AddListener(delegate { changeVolume(volumeSlider.value); });
    }

    //Called when Slider is moved
    void changeVolume(float sliderValue)
    {
        audioSource.volume = sliderValue;
    }

    void OnDisable()
    {
        //Un-Register Slider Events
        volumeSlider.onValueChanged.RemoveAllListeners();
    }
}

您可以了解有关 Unity 的更多信息 UI here