前言

   该文档为《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 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):下拉式音乐选择菜单相关推荐

  1. Unity游戏开发文档(3.1.1):弹窗效果

    前言      该文档为<Unity游戏开发文档(3):Dancing Line>的附属文档,亦可看作是单独的技术总结文档. 目录 综述 对话框的非匀速滑动 对话框动画的异步运行 最终效果 ...

  2. Unity游戏开发文档(3.1.3):滚动式关卡选择菜单

    前言      该文档为<Unity游戏开发文档(3):Dancing Line>的附属文档,亦可看作是单独的技术总结文档. 目录 综述 构建滚动菜单 读取关卡信息 填充菜单选项 选项自动 ...

  3. Unity游戏开发文档(1):飞行模拟

    前言     本篇的代码是基于Unity3D 系列课程 "Create with Code" 第一章 "Player Control" 改进而来 目录 背景 设 ...

  4. python飞机大战概要设计_飞机大战游戏开发文档(Android版)

    飞机大战游戏 开发文档 (Android版) 课程名称:飞机大战游戏 课程类型:Android游戏编程精彩内容,尽在百度攻略:https://gl.baidu.com 姓名:苏均灿 学号:131342 ...

  5. 微信小程序游戏开发文档以及开发工具地址

    微信小程序开发交流qq群   581478349    承接微信小程序开发.扫码加微信. 正文: 微信官方于 2017 - 12 - 28 日 开发微信小程序 开发小游戏 , 微信小程序小游戏开发官方 ...

  6. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏

    本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...

  7. php赛车游戏开发文档,React 开发一款简单的赛车游戏

    写在开始之前 最近研究egret引擎时,在论坛看到了用egret引擎写的一款赛车游戏 玩法很简单,左右控制赛车躲避来车,碰撞即游戏失败 下面将为大家一步步讲解,如何用React写出一款纯 javasc ...

  8. 微信小游戏开发文档(4)

    微信小游戏系统API: wx.onTouchEnd wx.offTouchEnd wx.onTouchCancel wx.offTouchCancel Touch 触点 微信小游戏数据缓存接口: wx ...

  9. 火力篮球游戏源码完整版-带游戏开发文档

    火力篮球,通过模拟现实中的投篮游戏机,而投篮游戏机又是源于街头篮球,街头篮球起源于美国,现在已经流行于世界的体育竞技项目,将投篮部分独立出来做成投篮游戏机.成为了专门的投篮类游戏设备.而本游戏就是将该 ...

最新文章

  1. 电脑怎么连蓝牙耳机_魅族蓝牙耳机POP2说明书 魅族蓝牙耳机POP2怎么样
  2. 清晨给研究生改论文改到“火大”
  3. 简述osi参考模型各层主要功能_OSI网络模型
  4. 洛谷T1967 货车运输 Kruskal最大生成树倍增LCA
  5. oracle对象管理及使用实验报告,oracle对象管理常用操作(objects management)
  6. opencv 图像分割-分水岭算法
  7. Spark DF:关于Row中的数值获取问题
  8. Windows Azure Storage (5) Windows Azure Drive
  9. Fedora 9 感受
  10. 质点碰撞和卢瑟福公式
  11. Python模拟微信发红包
  12. 告别户外弱网困扰,4G多卡聚合设备增强弱网环境下应急救援信号
  13. 怎么清除火狐浏览器的cookie?
  14. Asp.net Core 6.0 使用EF DB First 连接mysql
  15. 普通耳机的多源感知功能(智能耳机)
  16. 台式计算机用u盘给电脑安装系统,台式电脑怎么用U盘重装Win7系统
  17. 关于3D打印材料及发展方向分析
  18. mysql 分桶_mysql的分组和过滤桶where的组合运用
  19. springboot+Quartz整合!!!简单实用
  20. Ricky’s RealDan’s Ricky 博弈

热门文章

  1. 【百度小程序】细数百度小程序踩的坑
  2. Threejs系列--13游戏开发--沙漠赛车游戏【使用效果合成器添加高级效果】
  3. memcached 安装使用
  4. 华为产品测评官-开发者之声 - 华为云CodeArts真实体验感想
  5. Solidity中的变量种类以及常见的全局变量
  6. 微信公众号支付JSSDK
  7. VC6.0 add files to project 没有反应的解决方法
  8. luogu 1909
  9. NC15758 ——火车上的2连座
  10. Seetaface 02 Seetaface AndroidStudio Demo