IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity游戏开发文档(3.1.2):下拉式音乐选择菜单 -> 正文阅读

[游戏开发]Unity游戏开发文档(3.1.2):下拉式音乐选择菜单

前言
?
?? 该文档为《Unity游戏开发文档(3):Dancing Line》的附属文档,亦可看作是单独的技术总结文档。


?
?

综述

无论是在游戏中还是在其他应用程序中,我们都经常使用到下拉式选择菜单这一UI组件。

现在我们有这么一个场景,即我们需要在游戏中为玩家提供切换背景音乐的功能。我们希望游戏在加载阶段先读取所有的背景音乐,然后根据背景音乐的数量和名称,为下拉菜单填充对应的音乐的选项。在游戏进行过程中,玩家通过点击选项即可切换到对应的背景音乐。

?


?

构建下拉菜单

我们在Unity的 Hierarchy 面板中,通过 “右键 — UI — Dropdwon” 即可创建一个Unity预设的下拉菜单组件:

在这里插入图片描述

通过 “右键 --- UI --- Dropdwon” 创建
?

在这里插入图片描述

预设Dropdown组件
?

我们可以看到,预设的下拉菜单组件里已经包含了三个预设的选项。在实际运行中,我们的是用我们自己的的选项来替换掉预设的选项。

在这里插入图片描述

Dropdown预设选项
?

?


?

填充下拉菜单

用自定义选项来填充下来菜单需要用脚本来完成。我们首先需要读取所有的背景音乐:这一步需要在游戏加载的过程中完成。而且为了提高效率,我们使用了异步加载音乐:

private AudioClip[] theme_musics_;

void Awake() {
    StartCoroutine(LoadMusics());		// Asynchronous load music file
}

IEnumerator LoadMusics() {
    theme_musics_ = Resources.LoadAll<AudioClip>("AudioClips/Themes/");		// Load music file into a list
    yield break;
}

在所有音乐文件完成加载后,我们首先需要把下来菜单预设好的选项给删除掉,然后遍历我们在上一步得到的音乐文件列表,把每一个音乐作为选项填充到下拉菜单中。这一步需要在Unity绘制好了所有UI组件后执行,因此我们应该在 OnGUI() 之后执行上述操作:

private Dropdown theme_drop_;

void Start() {
	ThemeMusicInit();
}

void ThemeMusicInit() {
    theme_drop_.options.Clear();			// Clear all default options

    foreach(var item in theme_musics_) {
        theme_drop_.options.Add(new Dropdown.OptionData() { text = item.name });	// Push customize options into dropdown
    }
}

?


?

切换背景音乐

完成了上一步后,我们的下拉菜单能够正确地显示所有的音乐选项,但直接点击的话不会出现音乐切换的效果。这是因为我们还没有实现下拉菜单的具体逻辑。

我们的游戏中首先需要具备一个 AudioSource 组件。接下来我们需要为下拉菜单添加一个监听器,负责监听玩家选择了新的选项的交互事件。当监听器被触发后,下拉菜单需要获取到被选择到的音乐,然后调用切换函数,把 AudioSource 中当前正在播放的音乐替换为被选择到的音乐。

当然了,为了显得正常一点,我们应该让下拉菜单在游戏完成加载后,立刻自动选择一首背景音乐播放,这样玩家进入游戏后不需要自己手动到菜单中选择,就能立刻听到背景音乐了。

完整的代码如下:

private Dropdown theme_drop_;
private AudioClip[] theme_musics_;
private AudioSource audio_source_;

void Awake() {
    StartCoroutine(LoadMusics());		// Asynchronous load music file
}

void Start() {
	ThemeMusicInit();
	theme_drop_.onValueChanged.AddListener(ChangeThemeMusic);	// Listen player event
}

IEnumerator LoadMusics() {
    theme_musics_ = Resources.LoadAll<AudioClip>("AudioClips/Themes/");		// Load music file into a list
    yield break;
}

void ThemeMusicInit() {
    theme_drop_.options.Clear();

    foreach(var item in theme_musics_) {
        theme_drop_.options.Add(new Dropdown.OptionData() { text = item.name });
    }

    theme_drop_.value = 1;						// Play music at the very beginning of the game
    audio_source_.clip = theme_musics_[1];
    audio_source_.Play();
    audio_source_.loop = true;
}

void ChangeThemeMusic(int index) {
    audio_source_.Stop();
    audio_source_.clip = theme_musics_[index];
    audio_source_.Play();
    audio_source_.loop = true;
}

?


?

最终效果

Unity3D-下拉式音乐选择菜单

?


?

参考资料

用Resources.Load方法加载音频:https://www.cnblogs.com/soviby/p/10013290.html
Unity UI Tutorial Dropdown C# Scripting: https://www.youtube.com/watch?v=URS9A4V_yLc
Dropdown.onValueChanged():https://blog.csdn.net/oncruise/article/details/95988493

原创博客,不得转载、抄袭

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 11:09:07  更:2021-09-07 11:09:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/21 19:35:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码