Unity3D音频播放 动态加载组件
网上大多数Unity教程只讲述了如何在Unity里播放音乐,如何通过拖拽添加音频文件之后就没有继续了
但在游戏中有时候一个对象需要播放好几种声音,这个时候我们就需要用代码进行控制,教程上推拽给AudioClip赋值的方法就显得不是那么实用了
所以本篇将重点讲述如何在Unity中创建一个最简化的音频播放器,并通过代码进行动态加载与播放
①创建一个Empty对象 点击菜单栏[GameObject]–>Create Empty 命名为Audio
②选取这个空对象 点击菜单栏[Component]–>Audio–>Audio Source 这样就在场景里创建了如图所示的一个喇叭
③创建资源文件夹命名为Resources,并把BeiTown.mp3文件拖入其中,注意一定要将资源文件夹名设为Resources,否则Resources.Load方法将无法找到资源文件
④创建脚本
接下来开始创建脚本
MusicPlayer.cs
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
using UnityEngine;
using System.Collections; public class MusicPlayer : MonoBehaviour { public AudioSource Sound; public void Play(string str) } |
MusicTest.cs
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using UnityEngine;
using System.Collections; public class MusicTest : MonoBehaviour { private MusicPlayer music; void Start () { } void OnGUI() music.Play("BeiTown");//调用播放器Play方法 } } } |
⑤将脚步绑定到AudioSource音源对象上,并将Audio对象赋给MusicPlayer脚本里的Sound对象,以便MusicPlayer对其进行操作
⑥点击播放按钮
这个时候就能听到声音了,但是细心的朋友会发现左右耳朵的声音并不是一样大的,这是因为我们的声音监听绑定在了主摄像机上,这就照成了声音可能是从一个方向传来的3D效果,如果不想要这个效果也好办
选取Audio对象,点击菜单栏[Commponent]–>Audio–>Audio Listener
为Audio对象创建一个声音监听,并勾选它
重新点击播放按钮,这个时候发现依然没有改变,控制台出现如下警告:There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene.
不要着急,Main Camera 主摄像机上的Audio Listen 取消勾选了么
Unity默认一个scene里同时只能有一个声音监听,其实这也很好理解,在自然情况下,人类也不可能做到两只耳朵听取不同范围的声音(借助设备除外)
将其他的Audio Listener取消后,只保留Audio上的Audio Listener,点击Play按钮,一切正常!
其他的暂停,停止,等等操作这里就不再添加了,感兴趣的朋友可以自己参考API进行操作,本文主要描述如何动态加载一首音乐,并将该类进行封装,同时最简化的代码也利于大家观看理解。
今天就到这里吧,意在分享,与君共勉之。
Unity3D音频播放 动态加载组件相关推荐
- Flex LineChart曲线——动态加载组件
最近在学习Flex 和Asp.net互操作,在网上查找了一些资料,综合后, 做出了这个动态加载组件的LineChart曲线.尚有不足之处请予以指正:谢谢. 下面是完整代码: 代码 1 <?xml ...
- angular使用动态组件后属性值_Angular动态加载组件
引言 有时候需要根据URL来渲染不同组件,我所指的是在同一个URL地址中根据参数的变化显示不同的组件:这是利用Angular动态加载组件完成的,同时也会设法让这部分动态组件也支持AOT. 动态加载组件 ...
- vue.js 动态加载 html,Vue加载组件、动态加载组件的几种方式
什么是组件: 组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HT ...
- 踩坑记15 动态路由 router.options.routes未更新 | vue升级 element-plus未适配vue3.2.x | vite glob导入动态加载组件,不能使用别名alias
2021.8.12 坑50(vue-router4.addRoute().router.options.routes未更新):进行动态权限获取菜单的设置,使用了addRoute()来添加路由,但是ro ...
- Vue动态加载组件的四种方式
动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...
- react 动态路 嵌套动子路由_react 路由动态加载组件,实现按需加载
默认情况下,当在项目根路径下执行npm run build时,create-react- app内部使用webpack将src/路径下的所有代码打包成一个JS文件和一个 CSS文件. 当项目代码量不多 ...
- vue -- 动态加载组件 (tap 栏效果)
在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件. 因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使 ...
- vue3 动态加载组件、动态引入组件
1.问题 在做一个用vite构建的vue3项目时,动态拉取导入.vue页面,然后控制台一直有以下提示,页面也无法渲染出来. 2.分析 根据上面的报错提示,让我们安装并使用:@rollup/plugin ...
- vue 动态组件名_vue动态加载组件mounted无法获取dom的解决思路
有时我们在mouted方法中想通过id读取到一个dom元素,虽然官方并不推荐这种方法来操作dom.但难免有碰到这种情况,如下面 一个dom元素 试图在mouted中获取 试图在nextick中获取 结 ...
最新文章
- 接口冲突的一种解决方法
- soj 4539 贪心+优先队列
- 从零开始学电脑办公_从零开始学办公软件之办公软件介绍
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
- iOS开发常用的第三方
- 互联网晚报 | 11月7日 星期日 | EDG夺得《英雄联盟》S11总冠军;拼多多推出“超拼夜”系列;VMware与戴尔完成分拆...
- 开发者论坛一周精粹(第五十七期) 阿里云免费套餐 个人备案备注
- dubbo 服务压测_Dubbo高性能网关--Flurry介绍
- ucgui移植到rt_thread simulator
- 使用C#,轻松发邮件之QQ邮箱
- 常用的数据库软件各自有什么特点?
- Restorator 2007 Build 1709 韦斯特*金 汉化版
- 计算机一级仿宋gb2312,Word怎么设置仿宋体显示为仿宋GB2312字体?
- 【图像处理】图像锐化
- 三角函数在c语言中应用,三角函数在前端动画中的应用
- matlab 求拟合直线的斜率_如何用matlab求出图中各条直线的斜率
- 学习人工智能需要参加哪些课程或培训,如何选择?
- 华为面试100题:java开发工程师(中)
- golang学习十:网络编程
- 【bmzctf-crypto】--writeup
热门文章
- [架构之路-177]-《软考-系统分析师》-17-嵌入式系统分析与设计 -2- 系统分析与设计、低功耗设计
- 什么浏览器有html控制台,HTML标记突破出现在浏览器br,也可作为br,开发者控制台...
- 第19篇 基础(十九)详解QVector(数组)
- Socket和ServerSocket(建立客户端和服务器端)
- 码分多址(CDMA)通信原理
- train_test_split(),随机划分训练集和测试集的函数
- Oracle中 to_date()函数用法详解
- 微信公众平台接口测试帐号申请流程
- SystemUI架构分析
- Javascript代码用YC_jsRun()函数执行Javascript文件