using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeControl : MonoBehaviour
{
public GameObject panel01; // Panel_01 组件
public GameObject volumePanel; // 音量 Panel 组件
public Button button01; // Button_01 (4) 组件
public Slider volumeSlider; // 音量滑动条 Slider 组件
public TextMeshProUGUI volumePercentageText; // 显示音量百分比的 TextMeshPro 组件
public Button exitButton; // 退出按钮组件
private AudioSource[] allAudioSources; // 项目中所有的 AudioSource 组件
void Start()
{
// 初始化音量面板为失活状态
volumePanel.SetActive(false);
// 获取项目中所有的 AudioSource 组件
allAudioSources = FindObjectsOfType<AudioSource>();
// 添加按钮点击事件监听
button01.onClick.AddListener(OpenVolumePanel);
exitButton.onClick.AddListener(CloseVolumePanel);
// 添加滑动条值改变事件监听
volumeSlider.onValueChanged.AddListener(OnVolumeSliderChanged);
// 初始化滑动条范围和初始值
volumeSlider.minValue = 0;
volumeSlider.maxValue = 200;
volumeSlider.value = 100; // 默认音量为100%
}
void OpenVolumePanel()
{
// 激活音量面板
volumePanel.SetActive(true);
// 失活 Panel_01 组件
panel01.SetActive(false);
}
void CloseVolumePanel()
{
// 失活音量面板
volumePanel.SetActive(false);
// 激活 Panel_01 组件
//panel01.SetActive(true);
}
void OnVolumeSliderChanged(float value)
{
// 更新所有音频源的音量
foreach (AudioSource audioSource in allAudioSources)
{
audioSource.volume = value / 100f; // 将滑动条值转换为 0-200 范围内的音量
}
// 更新音量百分比文本
volumePercentageText.text = $"{value}%";
}
}
老规矩!人狠话不多,开局先上代码!
在Unity项目中想控制项目总体音量该咋办呢?
以下详细说明:
一、项目场景架构:
button01:打开声音设置按钮组件
panel01:button01的(父)面板组件
音量:音量panel
volumeSlider:音量控制滑动条
volumePercentageText:显示音量百分比的 TextMeshPro 组件
Button exitButton:退出按钮组件
VolumeManager:3D空物体,用来挂载脚本
在代码中这些东西全部公开定义了(记得拖拽组件到相关的脚本组价中),主要是为了为了方便,如果要封装性好一些,大家可以选择私有定义然后去场景中找的方案。
二、操作步骤:
1、将上述场景中的结构和相关组件创建好。
2、创建并复制开头C#脚本,然后挂载脚本到空物体VolumeManager上。
3、将上述各组件拖拽到脚本公开的变量中
三、代码思路:
1、用unity中的类型查找方法找到场景中全部的音频文件,存放到我们创建的私有音频数组中。
2、用循环遍历每一个音频文件,继而给每一个音频文件的音量赋值。音量百分比显示,用小小的音量值赋予即可。
3、点击按钮事件监听,控制UI的开关。
四、需要小小注意一下的点
1、在开始函数和各UI控制函数中要注意相关UI的激活失活,进行合理控制。像我一开始就写了在点击关闭音量控制退出按钮后直接显示它的父panel,后来测试这一步明显不合理,所以我直接注释掉了。