• U3D同时播放2个声音

    2014-11-17 01:08:32
    如果只有一个声音可以直接把音源拖到

    如果只有一个声音可以直接把音源拖到物体上,物体会自动生成Audio Source组件,然后需要在该物体上添加一个Audio Listener组件才会听得到声音(这个组件只能存在一个),后台控制播放的代码:GameObject.Find ("Mc").audio.Play ();  用find方法找到物体。

    如果有2个声音需要播放:同时添加2个Audio Source不能在代码中选择播放哪个声音。需要在后台添加多个Audio Clip对象。

    首先在后台代码中实例一个Audio Clip对象: public AudioClip audioClip;

    给需要播放声音的物体添加该脚本,同时添加Audio Listener组件,添加该脚本后会在前台中显示audioClip是None,给他添加一个你需要播放的声音,

    然后就可以在后台控制该声音的播放了:audio.PlayOneShot (audioClip);

    展开全文
  • 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: 多种播放音效的方式 AudioListener组件默认绑定在主摄像机上,这个...

    原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: 多种播放音效的方式


    AudioListener组件默认绑定在主摄像机上,这个组件的功能相当于耳朵,用来听声音的。

    1.背景音乐

    选中音乐文件,建议不勾选3D Sound选项。
    在Main Camera下创建一个空物体,添加AudioSound组件,AudioClip选择要播放的音乐。
    Loop必须勾选,循环播放。
    勾选PlayOnAwake,场景一进来就开始播放,如果不勾选找个合适时机Play()。

    2.NGUI的UIPlaySound

    在摄像机直接添加个AudioSource组件,这个组件不挂任何AudioClip。(UIPlaySound将在这个组件上播放音效,在这里调整Volume能控制所有UIPlaySound的音量大小。UIPlaySoundVolume属性只控制自己的音量,最后的音量是这两个音量值相乘。)

    3.碰撞触发的音效

    public AudioClip AC;
    OnCollisionEnter(Collision collision)
    //或者OnTriggerEnter(Collider collider)
    {
        //被撞得物体原点发出声音(第二个参数用来设置发出声音的世界坐标,不要离AudioListener太远)
        AudioSource.PlayClipAtPoint(AC, transform.localPosition);
    }

    4.Animation动作回调的音效

    public class AnimationCallSound : MonoBehaviour 
    {
        //防止同一个动作多次注册回调
        public static List<string> isHaveevent = new List<string>();
    
        //调用事件
        public float EventTime;
        //要播放的音效(必须绑定一个AudioSource组件)
        public AudioSource AS;
    
    	void Start () 
        {
            if (AS == null)
                Debug.LogError("没有绑定音效");
            AddEvent();
            //防止场景内动作相同的物体动作同步
            Invoke("PlayAnim",Random.Range(0.1f,5.5f));
    	}
        void PlayAnim()
        {
            animation.Play();
        }
    
    	
        //给Animation动画注册回调事件
        void AddEvent()
        {
            foreach (string name in isHaveevent)
            {
                if (animation.clip.name == name)
                    return;
            }
            
            AnimationEvent auidoEvent = new AnimationEvent();
            auidoEvent.time = EventTime;
            auidoEvent.functionName = "PlayAudio";
    
            animation.clip.AddEvent(auidoEvent);
            isHaveevent.Add(animation.clip.name);
            Debug.Log("add " + animation.clip.name + " Event!");
        }
    
        public void PlayAudio()
        {
            AS.Play();
        }
    }
    


    展开全文
  • unity3d声音播放

    2016-03-28 16:14:16
    把音频文件导入到unity以后,音频文件就会变成一个audioclip。 点击,可以看到属性 load type:小文件选择Decompress On Load,大的文件选Compressed In Memory Compression Format:PCM不压缩,一般选ADPCM,...

    1、audioclip

    把音频文件导入到unity以后,音频文件就会变成一个audioclip。


    点击,可以看到属性


    load type:小文件选择Decompress On Load,大的文件选Compressed In Memory

    Compression Format:PCM不压缩,一般选ADPCM,背景音乐,对话啥的选Vorbis/MP3

    Sample Rate Setting:一般选Optimize Sample Rate,优化采样率


    上面的是根据官方文档得出的结论,不过好像实际运用中还得看具体情况。


    2、AudioSource


    这是unity播放声音的基本组件,关联了audioclip就能够播放了。声音播放基本是在对这个组件进行操作。


    3、AudioListener

    每个场景只能有一个的组件,声音播放必须的组件,默认绑在main camera上。


    4、示例




    点击鼠标左键,生成一个立方体,同时发出声音。(模拟子弹射击,玩家发招的声音情况)

    这个声音经常使用,就绑定在控制方

    using UnityEngine;
    using System.Collections;
    
    public class ThrowCube : MonoBehaviour {
    
    	public GameObject perfab;
    	public AudioClip shoot_sound;
    	private AudioSource audio_source;
    
    	void Start () {
    		audio_source = GetComponent<AudioSource> ();
    	}
    
    	// Update is called once per frame
    	void Update () {
    		if (Input.GetMouseButtonDown (0)) {
    			audio_source.PlayOneShot (shoot_sound,GameInfo.effect_sound_volume);
    
    			GameObject shoot_obj = Instantiate (perfab, transform.position, transform.rotation) as GameObject;
    			shoot_obj.GetComponent<Rigidbody> ().AddRelativeForce (new Vector3 (Input.mousePosition.x/10, Input.mousePosition.y/5, 50f));
    		}
    	}
    }


    立方体掉出屏幕,发出声音并销毁。(模拟怪物被击中的情况)

    有种做法,因为这个声音使用频度也可能很高,就把声音绑着控制方,如玩家上。但是,这边为了编程省事,把声音绑着怪物上。

    稍微麻烦的地方是要等声音播放完毕再销毁。

    using UnityEngine;
    using System.Collections;
    
    public class CubeControl : MonoBehaviour
    {
    
    	public AudioClip destory_sound;
    	private AudioSource audio_source;
    
    	void Awake ()
    	{
    		audio_source = GetComponent<AudioSource> ();
    		audio_source.mute = GameInfo.effect_sound_mute;
    	}
    
    	void OnBecameInvisible ()
    	{
    		audio_source.PlayOneShot (destory_sound,GameInfo.effect_sound_volume);
    		InvokeRepeating ("DestorySelf", 0, .1f);
    	}
    
    	void DestorySelf(){
    		if (!audio_source.isPlaying) {
    			Destroy (gameObject);
    		}
    	}
    }


    场景开始播放背景音乐

    点击鼠标右键更换播放的背景音乐(模拟事件触发背景音改变)

    using UnityEngine;
    using System.Collections;
    
    public class BgSoundControl : MonoBehaviour
    {
    
    	public AudioClip[] bg_sounds;
    	private AudioSource audio_source;
    
    	void Awake ()
    	{
    		audio_source = GetComponent<AudioSource> ();
    		audio_source.volume = GameInfo.bg_music_volume;
    		audio_source.clip = bg_sounds [0];
    	}
    	
    	// Update is called once per frame
    	void Update ()
    	{
    		if (Input.GetMouseButtonDown (1)) {
    			audio_source.clip = bg_sounds [1];
    			audio_source.Play ();
    		}
    	}
    }


    添加音量控制

    为了方便控制,把背景音乐的游戏对象方到指定的tag便于控制。

    建立一个静态类存放音量信息,同时便于多方调用

    单次播放的声音,在播放的时候,传入音量大小的参数控制音量,背景声音是控制audiosource的volume值控制音量

    public static class GameInfo {
    
    	public static float effect_sound_volume;
    	public static float bg_music_volume;
    
    	public static bool effect_sound_mute;
    	public static bool bg_music_mute;
    
    }
    


    音量设置的类

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    
    
    
    
    public class SoundSetControl : MonoBehaviour
    {
    	private AudioSource bg_music;
    	public Slider sound_slider;
    	public Slider music_slider;
    	public Toggle sound_toggle;
    	public Toggle music_toggle;
    	public Button confirm_button;
    	public Button exit_button;
    	public AudioClip sound_clip;
    	public AudioClip music_clip;
    	private AudioSource audio_source;
    	public delegate void SoundSetAction();
    	public event SoundSetAction OnClose;
    
    
    	// Use this for initialization
    	void Awake ()
    	{
    		audio_source = GetComponent<AudioSource> ();
    		AudioSource[] list = FindObjectsOfType<AudioSource> ();
    		for (int i = 0; i < list.Length; i++) {
    			if (list [i].gameObject.tag == "BackgroundMusic") {
    				bg_music = list [i];
    				break;
    			}
    		}
    		LoadSoundSet ();
    		SetUI ();
    		Confirm ();
    		gameObject.SetActive (false);
    	}
    
    	void OnEnable (){
    		GetComponent<AudioSource> ().mute = false;
    	}
    		
    	public void SetEffectSound ()
    	{
    		audio_source.PlayOneShot (sound_clip, sound_slider.value);
    		sound_toggle.isOn = false;
    	}
    
    	public void SetBgMusic ()
    	{
    		audio_source.PlayOneShot (music_clip, music_slider.value);
    		music_toggle.isOn = false;
    	}
    
    	//根据变量设置游戏音量
    	public void Confirm(){
    		GameInfo.bg_music_mute = music_toggle.isOn;
    		GameInfo.effect_sound_mute = sound_toggle.isOn;
    		GameInfo.bg_music_volume = music_slider.value;
    		GameInfo.effect_sound_volume = sound_slider.value;
    
    		Save ();
    
    		AudioSource[] list = FindObjectsOfType<AudioSource> ();
    		for (int i = 0; i < list.Length; i++) {
    			list [i].mute = GameInfo.effect_sound_mute;
    		}
    		bg_music.mute = GameInfo.bg_music_mute;
    		bg_music.volume = GameInfo.bg_music_volume;
    	}
    
    	public void Exit(){
    		//SoundSetAction ();
    		if (OnClose != null) {
    			OnClose ();
    		}
    		gameObject.SetActive (false);
    	}
    		
    	private void LoadSoundSet ()
    	{
    		if (PlayerPrefs.GetInt ("SoundMute", 1)==1) {
    			GameInfo.effect_sound_mute = true;
    		} else {
    			GameInfo.effect_sound_mute = false;
    		}
    
    		if (PlayerPrefs.GetInt ("BgMusicMute", 1)==1) {
    			GameInfo.bg_music_mute = true;
    		} else {
    			GameInfo.bg_music_mute = false;
    		}
    
    		GameInfo.effect_sound_volume = PlayerPrefs.GetFloat ("EffectSoundVolume", 1f);
    		GameInfo.bg_music_volume = PlayerPrefs.GetFloat ("BgMusicVolume", 1f);
    	}
    
    	private void SetUI(){
    		sound_slider.value = GameInfo.effect_sound_volume;
    		sound_toggle.isOn = GameInfo.effect_sound_mute;
    		music_slider.value = GameInfo.bg_music_volume;
    		music_toggle.isOn = GameInfo.bg_music_mute;
    	}
    
    	private void Save(){
    		if (GameInfo.effect_sound_mute) {
    			PlayerPrefs.SetInt ("SoundMute", 1);
    		} else {
    			PlayerPrefs.SetInt ("SoundMute", 0);
    		}
    
    		if (GameInfo.bg_music_mute) {
    			PlayerPrefs.SetInt ("BgMusicMute", 1);
    		} else {
    			PlayerPrefs.SetInt ("BgMusicMute",0);
    		}
    
    		PlayerPrefs.SetFloat ("EffectSoundVolume", GameInfo.effect_sound_volume);
    		PlayerPrefs.SetFloat ("BgMusicVolume", GameInfo.bg_music_volume);
    	}
    }
    


    关闭的时候,用了事件,这样做的想法是,把这个类绑在canvas上,整个canvas可以做成预制件,方便在多个场景中使用。

    事件交由统一的事件处理类,将事件交到其他类去执行。目的是解耦合。

    using UnityEngine;
    using System.Collections;
    
    public class EventManage : MonoBehaviour {
    
    	private GameManage gameManage;
    	private SoundSetControl soundSetControl;
    
    	void Awake(){
    		gameManage = FindObjectOfType<GameManage> ();
    		soundSetControl = FindObjectOfType<SoundSetControl> ();
    	}
    		
    
    	// Use this for initialization
    	void Start () {
    		soundSetControl.OnClose+=gameManage.GamePlay;
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    	}
    }

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    
    public class GameManage : MonoBehaviour {
    
    	//public delegate void GameAction();
    	//public event GameAction OnGamePause,OnGamePlay;
    
    	public GameObject sound_canvas;
    
    	private ThrowCube throw_cube;
    	private AudioSource bg_music;
    
    	public Text txt;
    
    	// Use this for initialization
    	void Awake () {
    		throw_cube = FindObjectOfType<ThrowCube> ();
    
    		AudioSource[] list = FindObjectsOfType<AudioSource> ();
    		for (int i = 0; i < list.Length; i++) {
    			if (list [i].gameObject.tag == "BackgroundMusic") {
    				bg_music = list [i];
    				break;
    			}
    		}
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		if (Input.GetKey (KeyCode.Escape)) {
    			sound_canvas.SetActive (true);
    			GamePause ();
    		}
    
    		txt.text = GameInfo.bg_music_mute.ToString () + ";" + GameInfo.bg_music_volume.ToString () + ";" + GameInfo.effect_sound_mute.ToString () + ";" + GameInfo.effect_sound_volume.ToString ();
    	}
    
    	public void GamePause(){
    		throw_cube.enabled = false;
    		bg_music.Pause ();
    	}
    
    	public void GamePlay(){
    		throw_cube.enabled = true;
    		bg_music.Play ();
    	}
    }


    内容下载:http://download.csdn.net/detail/wuyt2008/9474143




    展开全文
  • 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)
        {
            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对其进行操作

    ⑥点击播放按钮

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

    2016-02-25 23:41:07
    本节讲解的是Unity3D中的视频播放功能: 在Unity3D播放视频有两种方式:一中是在GUI上直接播放,另一种是以GameObject为载体播放

          近日接到公司通知,对公司想学Unity3D游戏引擎的同仁进行专业培训,老大就挑了一些项目中时常用到的知识点,分给我和另一个主程备课,定时进行培训,然后就有了现在的这篇文章了,有不足的地方还请大家指正,先谢谢啦!

          本节讲解的是Unity3D中的视频播放功能:

          在Unity3D中播放视频有两种方式:一中是在GUI上直接播放,另一种是以GameObject为载体播放。

    一、GUI上直接播放视频的方式:

    有脚本如下:GuiPlay.cs

    public class GuiPlay : MonoBehaviour {
    public MovieTexture g_MTMov;
    void Start () {
            //设置音频
            audio.clip = g_MTMov.audioClip;
    	}
     void OnGUI()
        {
            //绘制电影纹理
            GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), g_MTMov, ScaleMode.StretchToFill); 
            if(GUILayout.Button("Play"))
            {
                if(!g_MTMov.isPlaying)
                {
                    g_MTMov.Play();
                    audio.Play();
                }
            }
            if (GUILayout.Button("Pause"))
            {
                if (g_MTMov.isPlaying)
                {
                    g_MTMov.Pause();
                    audio.Pause();
                }
            }
            if (GUILayout.Button("Stop"))
            {
                if (g_MTMov.isPlaying)
                {
                    g_MTMov.Stop();
                    audio.Stop();
                }
            }
        }
    }

    把此脚本直接拖到MainCamera上,然后拖入视频,如下图:


    二、以GameObject为载体播放视频

    修改GuiPlay.cs代码

    public class GuiPlay : MonoBehaviour {
    public MovieTexture g_MTMov;
    void Start () {
    //在对象中播放时设¦置材质¨
            this.renderer.material.mainTexture = g_MTMov;
            //设置音频
            audio.clip = g_MTMov.audioClip;
    	}
     void OnGUI()
        {
            if(GUILayout.Button("Play"))
            {
                if(!g_MTMov.isPlaying)
                {
                    g_MTMov.Play();
                    audio.Play();
                }
            }
            if (GUILayout.Button("Pause"))
            {
                if (g_MTMov.isPlaying)
                {
                    g_MTMov.Pause();
                    audio.Pause();
                }
            }
            if (GUILayout.Button("Stop"))
            {
                if (g_MTMov.isPlaying)
                {
                    g_MTMov.Stop();
                    audio.Stop();
                }
            }
        }
    }

    把此脚本直接拖到GameObject上,然后拖入视频,如下图:



    三、注意事项:

    1,Unity3D支持的视频格式有:.mov、.mpg、.mpeg、.mp4、.avi和.asf。

    可以用格式工场转换视频。

    2,Unity3D解码报错,如下图:


    PC需要安装QuickTime,安装后重启电脑。

    3,视频声音控制

    需要添加AudioSource组件和AudioListener组件。

    在控制视频播放时同时控制音频即可。


    我的Unity3D 是4.3.3版本。

    以上就是全部内容了,

    如果我写的能帮到你,我将感到很开心,有不足的地方也请指出,我是  “破破”,谢谢!
    展开全文
  • 做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。...Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!
  • Unity3D-场景声音播放

    2014-10-23 21:36:08
  • public GameObject[] sirens;//存放多个物体 public bool alermOn = false;//默认启动为false void Awake()//赋值 { alermOn = false; } void Update ()//用剑检测是否启动 { if (alermOn) ... ...
  • 原创文章如需转载请注明转载自 脱莫柔Unity3D学习之旅 本文链接地址 Unity3D 声音格式和导入文件类型转换属性音频侦听器 Audio Listener音频源 Audio Source 属性 D声音设置3D Sound SettingsD声音设置2D...
  • Unity中,如果需要让播放声音,只需要给游戏对象添加AudioSourse组件即可,但,默认的组件中,仅支持一条音源的播放,如要实现多条音源的播放,可在代码中实现,具体方法如下:首先在类中申请多个音频文件类型的变量...
  • 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【119706192】本文链接地址: Unity3D 声音格式和导入 Unity支持压缩的和原生的音频。任何类型的文件(MP3/Ogg Vorbis的除外),最初都以原生...
  • Unity3D视频在线本地播放之AVPro Video插件 Avpro Video是一款由强大团队出品的可以在Unity上安装使用的万能多平台视频播放插件,Avpro Video支持Windows,linux,ios,mac,Android等多平台万能播放 插件提供了播放和...
  • Unity3D-声音处理

    2019-08-14 15:06:18
    个人博客:http://www.chenjianqu.com/ ... 目录: WAV的基本知识 AudioClip概述 Microphone概述 AudioSource概述 WavUtility概述 录音保存并播放示例 参考文献 附录:WavUtility类的代码 WAV音频格式 WAV...
  • Unity3d不久之前正式发布了Unity3d 2017.1, 这个版本的发布也宣告了Unity3d正式告别了5.x时代,并且开始已年份直接命名,开启了新的纪元。那么Unity3d 2017相较上一版本到底有哪些改进呢?这介绍这些改进之前先放出...
  • 今天学习的时候 把视频拖到unity的时候生成了格式 这是新版的视频播放 旧版的是 把新版动画给一个物体 把摄像机调到它身边 发现没有声音 查阅了API 解决 第一步 第二部 不需要 给他传音频 ...
  • 模拟游戏对象进入或退出某个区域触发事件,并且播放音效的过程。
  • 一开始根本没想到要加collider,太傻了,加上collider后,可以通过模型的名字或者是加个tag...(这也是为什么之前在每个模型上都加了Audiosource,导致一开始在切换模型的时候,会同时播放好几个音频(喇叭太多了,...
  • 网上大多数Unity教程只讲述了如何在Unity播放音乐,如何通过拖拽添加音频文件之后就没有继续了 但在游戏中有时候一个对象需要播放好几种声音,这个时候我们就需要用代码进行控制,教程上推拽给AudioClip赋值的...
  • Unity使用NAudio播放MP3音频有两种方式,使用声卡直接播放和使用Unity的AudioSource播放。接下来我们一一了解。 直接播放   在Unity中直接播放,需要先申请实例化一个WaveOutEvent对象,用于将音频直接发送到...
1 2 3 4 5 ... 20
收藏数 943
精华内容 377