Unity游戏开发文档(3.1.2):下拉式音乐选择菜单
前言
该文档为《Unity游戏开发文档(3):Dancing Line》的附属文档,亦可看作是单独的技术总结文档。
目录
- 综述
- 构建下拉菜单
- 填充下拉菜单
- 切换背景音乐
- 最终效果
- 参考资料
综述
无论是在游戏中还是在其他应用程序中,我们都经常使用到下拉式选择菜单这一UI组件。
现在我们有这么一个场景,即我们需要在游戏中为玩家提供切换背景音乐的功能。我们希望游戏在加载阶段先读取所有的背景音乐,然后根据背景音乐的数量和名称,为下拉菜单填充对应的音乐的选项。在游戏进行过程中,玩家通过点击选项即可切换到对应的背景音乐。
构建下拉菜单
我们在Unity的 Hierarchy 面板中,通过 “右键 — UI — Dropdwon” 即可创建一个Unity预设的下拉菜单组件:
我们可以看到,预设的下拉菜单组件里已经包含了三个预设的选项。在实际运行中,我们的是用我们自己的的选项来替换掉预设的选项。
填充下拉菜单
用自定义选项来填充下来菜单需要用脚本来完成。我们首先需要读取所有的背景音乐:这一步需要在游戏加载的过程中完成。而且为了提高效率,我们使用了异步加载音乐:
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 listyield break;
}
在所有音乐文件完成加载后,我们首先需要把下来菜单预设好的选项给删除掉,然后遍历我们在上一步得到的音乐文件列表,把每一个音乐作为选项填充到下拉菜单中。这一步需要在Unity绘制好了所有UI组件后执行,因此我们应该在 OnGUI() 之后执行上述操作:
private Dropdown theme_drop_;void Start() {ThemeMusicInit();
}void ThemeMusicInit() {theme_drop_.options.Clear(); // Clear all default optionsforeach(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 listyield 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 gameaudio_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
原创博客,不得转载、抄袭
Unity游戏开发文档(3.1.2):下拉式音乐选择菜单相关推荐
- Unity游戏开发文档(3.1.1):弹窗效果
前言 该文档为<Unity游戏开发文档(3):Dancing Line>的附属文档,亦可看作是单独的技术总结文档. 目录 综述 对话框的非匀速滑动 对话框动画的异步运行 最终效果 ...
- Unity游戏开发文档(3.1.3):滚动式关卡选择菜单
前言 该文档为<Unity游戏开发文档(3):Dancing Line>的附属文档,亦可看作是单独的技术总结文档. 目录 综述 构建滚动菜单 读取关卡信息 填充菜单选项 选项自动 ...
- Unity游戏开发文档(1):飞行模拟
前言 本篇的代码是基于Unity3D 系列课程 "Create with Code" 第一章 "Player Control" 改进而来 目录 背景 设 ...
- python飞机大战概要设计_飞机大战游戏开发文档(Android版)
飞机大战游戏 开发文档 (Android版) 课程名称:飞机大战游戏 课程类型:Android游戏编程精彩内容,尽在百度攻略:https://gl.baidu.com 姓名:苏均灿 学号:131342 ...
- 微信小程序游戏开发文档以及开发工具地址
微信小程序开发交流qq群 581478349 承接微信小程序开发.扫码加微信. 正文: 微信官方于 2017 - 12 - 28 日 开发微信小程序 开发小游戏 , 微信小程序小游戏开发官方 ...
- java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏
本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...
- php赛车游戏开发文档,React 开发一款简单的赛车游戏
写在开始之前 最近研究egret引擎时,在论坛看到了用egret引擎写的一款赛车游戏 玩法很简单,左右控制赛车躲避来车,碰撞即游戏失败 下面将为大家一步步讲解,如何用React写出一款纯 javasc ...
- 微信小游戏开发文档(4)
微信小游戏系统API: wx.onTouchEnd wx.offTouchEnd wx.onTouchCancel wx.offTouchCancel Touch 触点 微信小游戏数据缓存接口: wx ...
- 火力篮球游戏源码完整版-带游戏开发文档
火力篮球,通过模拟现实中的投篮游戏机,而投篮游戏机又是源于街头篮球,街头篮球起源于美国,现在已经流行于世界的体育竞技项目,将投篮部分独立出来做成投篮游戏机.成为了专门的投篮类游戏设备.而本游戏就是将该 ...
最新文章
- 电脑怎么连蓝牙耳机_魅族蓝牙耳机POP2说明书 魅族蓝牙耳机POP2怎么样
- 清晨给研究生改论文改到“火大”
- 简述osi参考模型各层主要功能_OSI网络模型
- 洛谷T1967 货车运输 Kruskal最大生成树倍增LCA
- oracle对象管理及使用实验报告,oracle对象管理常用操作(objects management)
- opencv 图像分割-分水岭算法
- Spark DF:关于Row中的数值获取问题
- Windows Azure Storage (5) Windows Azure Drive
- Fedora 9 感受
- 质点碰撞和卢瑟福公式
- Python模拟微信发红包
- 告别户外弱网困扰,4G多卡聚合设备增强弱网环境下应急救援信号
- 怎么清除火狐浏览器的cookie?
- Asp.net Core 6.0 使用EF DB First 连接mysql
- 普通耳机的多源感知功能(智能耳机)
- 台式计算机用u盘给电脑安装系统,台式电脑怎么用U盘重装Win7系统
- 关于3D打印材料及发展方向分析
- mysql 分桶_mysql的分组和过滤桶where的组合运用
- springboot+Quartz整合!!!简单实用
- Ricky’s RealDan’s Ricky 博弈