网上大多数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)
    {
        Sound.clip = (AudioClip)Resources.Load(str, typeof(AudioClip));//调用Resources方法加载AudioClip资源
        Sound.Play();
    }

}

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 () {
    
        music = (GetComponent("MusicPlayer") as MusicPlayer);//获取播放器对象

}

void OnGUI()
    {
        if(GUI.Button(new Rect(10, 10, 100, 50), "PLAY")){

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音频播放 动态加载组件相关推荐

  1. Flex LineChart曲线——动态加载组件

    最近在学习Flex 和Asp.net互操作,在网上查找了一些资料,综合后, 做出了这个动态加载组件的LineChart曲线.尚有不足之处请予以指正:谢谢. 下面是完整代码: 代码 1 <?xml ...

  2. angular使用动态组件后属性值_Angular动态加载组件

    引言 有时候需要根据URL来渲染不同组件,我所指的是在同一个URL地址中根据参数的变化显示不同的组件:这是利用Angular动态加载组件完成的,同时也会设法让这部分动态组件也支持AOT. 动态加载组件 ...

  3. vue.js 动态加载 html,Vue加载组件、动态加载组件的几种方式

    什么是组件: 组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HT ...

  4. 踩坑记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 ...

  5. Vue动态加载组件的四种方式

    动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...

  6. react 动态路 嵌套动子路由_react 路由动态加载组件,实现按需加载

    默认情况下,当在项目根路径下执行npm run build时,create-react- app内部使用webpack将src/路径下的所有代码打包成一个JS文件和一个 CSS文件. 当项目代码量不多 ...

  7. vue -- 动态加载组件 (tap 栏效果)

    在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件. 因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使 ...

  8. vue3 动态加载组件、动态引入组件

    1.问题 在做一个用vite构建的vue3项目时,动态拉取导入.vue页面,然后控制台一直有以下提示,页面也无法渲染出来. 2.分析 根据上面的报错提示,让我们安装并使用:@rollup/plugin ...

  9. vue 动态组件名_vue动态加载组件mounted无法获取dom的解决思路

    有时我们在mouted方法中想通过id读取到一个dom元素,虽然官方并不推荐这种方法来操作dom.但难免有碰到这种情况,如下面 一个dom元素 试图在mouted中获取 试图在nextick中获取 结 ...

最新文章

  1. 接口冲突的一种解决方法
  2. soj 4539 贪心+优先队列
  3. 从零开始学电脑办公_从零开始学办公软件之办公软件介绍
  4. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
  5. iOS开发常用的第三方
  6. 互联网晚报 | 11月7日 星期日 | EDG夺得《英雄联盟》S11总冠军;拼多多推出“超拼夜”系列;VMware与戴尔完成分拆...
  7. 开发者论坛一周精粹(第五十七期) 阿里云免费套餐 个人备案备注
  8. dubbo 服务压测_Dubbo高性能网关--Flurry介绍
  9. ucgui移植到rt_thread simulator
  10. 使用C#,轻松发邮件之QQ邮箱
  11. 常用的数据库软件各自有什么特点?
  12. Restorator 2007 Build 1709 韦斯特*金 汉化版
  13. 计算机一级仿宋gb2312,Word怎么设置仿宋体显示为仿宋GB2312字体?
  14. 【图像处理】图像锐化
  15. 三角函数在c语言中应用,三角函数在前端动画中的应用
  16. matlab 求拟合直线的斜率_如何用matlab求出图中各条直线的斜率
  17. 学习人工智能需要参加哪些课程或培训,如何选择?
  18. 华为面试100题:java开发工程师(中)
  19. golang学习十:网络编程
  20. 【bmzctf-crypto】--writeup

热门文章

  1. [架构之路-177]-《软考-系统分析师》-17-嵌入式系统分析与设计 -2- 系统分析与设计、低功耗设计
  2. 什么浏览器有html控制台,HTML标记突破出现在浏览器br,也可作为br,开发者控制台...
  3. 第19篇 基础(十九)详解QVector(数组)
  4. Socket和ServerSocket(建立客户端和服务器端)
  5. 码分多址(CDMA)通信原理
  6. train_test_split(),随机划分训练集和测试集的函数
  7. Oracle中 to_date()函数用法详解
  8. 微信公众平台接口测试帐号申请流程
  9. SystemUI架构分析
  10. Javascript代码用YC_jsRun()函数执行Javascript文件