Unity3D音频播放 动态加载组件

网上大多数Unity教程只讲述了如何在Unity里播放音乐,如何通过拖拽添加音频文件之后就没有继续了
但在游戏中有时候一个对象需要播放好几种声音,这个时候我们就需要用代码进行控制,教程上推拽给AudioClip赋值的方法就显得不是那么实用了
所以本篇将重点讲述如何在Unity中创建一个最简化的音频播放器,并通过代码进行动态加载与播放

①创建一个Empty对象 点击菜单栏[GameObject]–>Create Empty 命名为Audio

②选取这个空对象 点击菜单栏[Component]–>Audio–>Audio Source 这样就在场景里创建了如图所示的一个喇叭

Unity3D音频播放 动态加载组件_第1张图片

③创建资源文件夹命名为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 ( 101010050 )"PLAY" ) ) {

            music . Play ( "BeiTown" ) ; //调用播放器Play方法

         }

     }

}

⑤将脚步绑定到AudioSource音源对象上,并将Audio对象赋给MusicPlayer脚本里的Sound对象,以便MusicPlayer对其进行操作

Unity3D音频播放 动态加载组件_第2张图片

⑥点击播放按钮

Unity3D音频播放 动态加载组件_第3张图片

这个时候就能听到声音了,但是细心的朋友会发现左右耳朵的声音并不是一样大的,这是因为我们的声音监听绑定在了主摄像机上,这就照成了声音可能是从一个方向传来的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)