unity3d 音乐的勾选_unity3d 不勾选脚本代码 - CSDN
  • 原创文章如需转载请注明:转载自 脱莫柔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.碰撞触发的音效

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

    4.Animation动作回调的音效

    1. public class AnimationCallSound : MonoBehaviour   
    2. {  
    3.     //防止同一个动作多次注册回调  
    4.     public static List<string> isHaveevent = new List<string>();  
    5.   
    6.     //调用事件  
    7.     public float EventTime;  
    8.     //要播放的音效(必须绑定一个AudioSource组件)  
    9.     public AudioSource AS;  
    10.   
    11.     void Start ()   
    12.     {  
    13.         if (AS == null)  
    14.             Debug.LogError("没有绑定音效");  
    15.         AddEvent();  
    16.         //防止场景内动作相同的物体动作同步  
    17.         Invoke("PlayAnim",Random.Range(0.1f,5.5f));  
    18.     }  
    19.     void PlayAnim()  
    20.     {  
    21.         animation.Play();  
    22.     }  
    23.   
    24.       
    25.     //给Animation动画注册回调事件  
    26.     void AddEvent()  
    27.     {  
    28.         foreach (string name in isHaveevent)  
    29.         {  
    30.             if (animation.clip.name == name)  
    31.                 return;  
    32.         }  
    33.           
    34.         AnimationEvent auidoEvent = new AnimationEvent();  
    35.         auidoEvent.time = EventTime;  
    36.         auidoEvent.functionName = "PlayAudio";  
    37.   
    38.         animation.clip.AddEvent(auidoEvent);  
    39.         isHaveevent.Add(animation.clip.name);  
    40.         Debug.Log("add " + animation.clip.name + " Event!");  
    41.     }  
    42.   
    43.     public void PlayAudio()  
    44.     {  
    45.         AS.Play();  
    46.     }  
    47. }  
    展开全文
  • 一般来说,从设计初衷来看,把挂在物体上的脚本勾选状态改为不勾选,这个脚本就不会运行。 然而真实情形只是生命周期函数和用户自定义的且外部不被访问的函数不运行罢了; 当enabled设置为false,且方法为外部调用的...

    一般来说,从设计初衷来看,把挂在物体上的脚本勾选状态改为不勾选,这个脚本就不会运行。

    然而真实情形只是生命周期函数和用户自定义的且外部不被访问的函数不运行罢了;

    当enabled设置为false,且方法为外部调用的这个是必定会被执行,暂不讨论。

    我遇到去掉钩也运行的情况,是调用unity API导致的,难免有些意外,就此说道说道好了!
    首先,神奇的代码如下:

    using UnityEngine;
    public class testForChangeTexture : MonoBehaviour {
        AnimEmoj animEmoj;
        void Start () {
            animEmoj = GetComponent<AnimEmoj>();
        }
        private void OnMouseDown()
        {
            animEmoj.Playing(gameObject,0,-1);
        }
    }
    

    然后取消勾选该脚本,运行居然还会报错:
    在这里插入图片描述
    明明取消了脚本的勾选

    在这里插入图片描述
    居然这个脚本会爆出对象为空警告

    我们分析下为何他会报错:显然是animEmoj没有赋值,也就是说Start方法没有运行。
    综上,我们先怀疑一下,就是事件监听这类的Unity内置方法,只要挂在游戏对象上,即便不勾选也会执行;
    好的,我们试试究竟是不是真的取消了勾选,这个OnMouseDown()依旧运行!
    如下,Debug一下即可:

    using UnityEngine;
    public class testForChangeTexture : MonoBehaviour {
        AnimEmoj animEmoj;
        void Start () {
            animEmoj = GetComponent<AnimEmoj>();
            Debug.Log("运行了Start方法!");
        }
        private void OnMouseDown()
        {
            Debug.Log("我还在运行");
            animEmoj.Playing(gameObject,0,-1);
        }
    }
    

    在这里插入图片描述
    运行前先挂载该脚本,但不勾选

    好!! 见证奇迹时候到了(注意:Start里面的Debug没有运行~):
    在这里插入图片描述对着挂载该脚本的游戏对象点击,居然还是运行了

    别浪,再试试OnTriggerEnter(),不勾选能进去不?
    代码块:

    using UnityEngine;
    public class testForChangeTexture : MonoBehaviour {
        AnimEmoj animEmoj;
        void Start () {
            Debug.Log("运行了Start方法!");
            animEmoj = GetComponent<AnimEmoj>();
        }
        private void OnTriggerEnter(Collider other)
        {
            Debug.Log("我运行了,"+other.name+"在碰我!");
        }
    }
    

    在这里插入图片描述

    我真的取消了勾选,居然真的真的还是运行了!!

    注意: Start里面的Debug依旧没有运行~

    再来一例

    using UnityEngine;
    public class testForChangeTexture : MonoBehaviour {
        public AnimEmoj animEmoj;
        public GameObject obj;
        void Start () {
            Debug.Log("进来?");
        }
        private void OnMouseDown()
        {
            Debug.Log("你没有勾选,但我就是进来了!");
            if (null!=animEmoj)
            {
            animEmoj.Playing(obj, 0, -1);
            }
        }
    }
    

    Debug输出&效果:

    在这里插入图片描述
    没有勾选也跑的那么溜,你说坑不坑

    绕过Start直接赋值OnMouseDown()里面要用到的对象,运行起来发现脚本勾不勾选都make no difference了;
    总结: 脚本不被勾选,大部分生命周期函数不会执行,但是内置的事件监测的方法,譬如这个OnMouseDown(),OnTriggerEnter();都能运行;
    经过确认,生命周期函数Awake,OnApplicationPause,不勾选启动时均会调用一次,停止运行时OnDestoey,OnApplicationQuit 会调用一次

    还有一个笔者没有试的,那就是继承了unity内置接口并实现的,被响应也会执行吧…

    好了,要教大家躲坑了;

    1、如果在这些方法里面写了逻辑,逻辑里面引用的对象的,先判断对象是否为Null;
    2、如果这些事件监听的方法里面写了音乐播放的,特效播放的,用代码控制这个脚本的Active属性没用哦
    直接动态加载和卸载这个脚本就好了(Destory(GetComponet<yourcode.cs>()))
    3、看了本文,以后调试报错就不会因为这个现象懵逼了
    4、针对行文开头提及的enabled设为false,外部调用方法的问题,建议为了稳健,可以先判断enabled不为false时执行。


    有时候脚本的勾选项会没有了,如:

    在这里插入图片描述

    这时,如果你想让勾选框显示出来, 加上Start、Update、LateUpdate、FixedUpdate、OnGUI 其中一个方法可以让勾选框显示出来。。。但是Awake不行。。


    参考链接:https://www.jianshu.com/p/7a680771c34b
    http://www.xuanyusong.com/archives/3130

    展开全文
  • 游戏音频的播放在任何游戏中都占据非常重要的地位,音频的播放还...今天MOMO将用下面的例子带盆友们去剖析Unity3D游戏音乐与音效的播放。 Unity3D游戏引擎一共支持4个音乐格式的文件 .AIFF 适用于较短的音乐文件可用

    游戏音频的播放在任何游戏中都占据非常重要的地位,音频的播放还可以分为两种,一种为游戏音乐,另一种为游戏音效。前者适用于较长的音乐,如游戏背景音乐。第二种试用与比较短的游戏音乐,如开枪,打怪 时“砰砰”一瞬间播放的游戏音效。今天MOMO将用下面的例子带盆友们去剖析Unity3D游戏音乐与音效的播放。

    Unity3D游戏引擎一共支持4个音乐格式的文件

    .AIFF  适用于较短的音乐文件可用作游戏打斗音效

    .WAV  适用于较短的音乐文件可用作游戏打斗音效

    .MP3  适用于较长的音乐文件可用作游戏背景音乐

    .OGG  适用于较长的音乐文件可用作游戏背景音乐

    在场景中创建一个空的游戏对象。

    GameObject -> CreateEmpty  创建成功后我命名为audio。

    给audio添加一个AudioSource属性,这个属性非常的重要,Unity播放音乐主要就是要靠这个东西。

    Component -> Audio – > Audio Source。

     

    Unity3D研究院之详解游戏开发音频的播放(十五) - 雨松MOMO程序研究院 - 1

     

    找一个音乐文件,我这里使用了一个.mp3音乐文件,我命名为0.mp3 如下图所示将它拖动到右侧Audio Clip处。

     

    Unity3D研究院之详解游戏开发音频的播放(十五) - 雨松MOMO程序研究院 - 2

     

    我们发现 Audio Source 有很多设置的属性,那么MOMO将一些比较重要的属性诺列出来。


    AudioClip :声音片段,还可以在代码中去动态的截取音乐文件。

    Mute : 是否静音

    Bypass Effects: 是否打开音频特效

    Play On Awake: 开机自动播放

    Loop:循环播放

    Volume: 声音大小,取值范围0.0 到 1.0

    Pitch:播放速度,取值范围在 -3 到 3 之间 设置1 为正常播放,小于1 为减慢播放 大于1为加速播放。创建一个脚本我命名为audio.cs 用来音乐的播放。本章将实现3个按钮 点击实现 播放音乐、 停止音乐、 暂停音乐 ,与一个横向拖动条通过手指的拖动实现动态修改音乐声音。

    audio.cs 

    将audio.cs 绑定在摄像头上,将audio游戏对象拖动赋值给Music 这个AudioSource这个对象。这里强调一下AudioListenr ,它音频监听器,用来监听音乐文件的播放。这是一个重要的属性,一定要勾选,只有勾选后才可以进行音乐的播放。

     

    Unity3D研究院之详解游戏开发音频的播放(十五) - 雨松MOMO程序研究院 - 3

     

    build and run 运行我们这个游戏Demo,一切功能完美实现,哇咔咔~

     

    Unity3D研究院之详解游戏开发音频的播放(十五) - 雨松MOMO程序研究院 - 4

     

    最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,大家一起学习一起进步,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。今天心里有点不高兴! 5555555555。就这样晚安~

    下载地址:http://vdisk.weibo.com/s/abxs8

     

    补充:

    最近有朋友问我如何切换场景Unity音频不关闭,其实做法非常简单。如下图所示,你的声音组件会放在声音对象中,因为切换场景的时候声音对象会自动销毁,所以声音就会关闭。所以如果你的声音组件不被销毁掉,哪么你的声音就会连续播放了。

     

    Unity3D研究院之详解游戏开发音频的播放(十五) - 雨松MOMO程序研究院 - 5

    代码就是使用DontDestroyOnLoad()方法就可以切换场景不施放对象了。 

    展开全文
  • Unity3D音乐音效学习

    2017-08-07 14:14:36
    对于Unity3D音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下。 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击,开枪...

    对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下。

    支持格式

    在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击,开枪音效等)。

    Unity3D支持下面几种音乐格式:

    • AIFF:适用于较短的音乐文件可用作游戏打斗音效
    • WAV:适用于较短的音乐文件可用作游戏打斗音效
    • MP3:适用于较长的音乐文件可用作游戏背景音乐
    • OGG:适用于较长的音乐文件可用作游戏背景音乐

    音乐组件

    Unity3D中对音乐进行了封装,总体来说,要播放音乐需要3个基本的组件,下面我们来看看这3个组件。

    AudioListener

    一般我们创建场景时在主Camera上就会带有这个组件,该组件只有一个功能,就是监听当前场景下的所有音效的播放并将这些音效输出,如果没有这个组件,则不会发出任何的声音。好消息是,我们不需要创建多个该组件,一般场景中只需要在任意的GameObject上添加一个该组件就可以了,但是要保证这个GameObject不被销毁,所以一般按照Unity的做法,在主摄像机中添加即可。

    AudioSource

    控制一个指定音乐播放的组件,可以通过属性设置来控制音乐的一些效果,可以查看官方的文档:http://docs.unity3d.com/Manual/class-AudioSource.html

    下面列出一些常用的属性:

    • AudioClip:声音片段,还可以在代码中去动态的截取音乐文件。
    • Mute:是否静音。
    • Bypass Effects:是否打开音频特效。
    • Play On Awake:开机自动播放。
    • Loop:循环播放。
    • Volume:声音大小,取值范围0.0 到 1.0。
    • Pitch:播放速度,取值范围在 -3 到 3 之间 设置1 为正常播放,小于1 为减慢播放 大于1为加速播放。

    AudioClip

    当我们把一个音乐导入到Unity3D中,这个音乐文件就会变成一个AudioClip对象,即我们可以直接将其拖拽到AudioSource的AudioClip属性中,也可以通过Resources或AssetBundle进行加载,加载出来的对象类型就是AudioClip。

    看例子

    播放音乐的简单例子

    这个例子我们直接通过简单的拖拽的点击不写一行代码实现音乐的播放。

    新建一个场景,给Main Camera添加一个Audio Source组件,并将我们的音乐文件拖拽到Audio Clip属性上,勾选Loop使其可以进行循环播放。

    运行程序就可以听到声音了。

    3D音效效果

    Unity为啥要把音乐播放拆分成这3个组件呢?当然是有原因的,个人认为其中最重要的就是实现3D音效效果。

    如果我们将Audio Listener看作一双耳朵的话就可以很好的理解什么是3D音效效果了,Unity会根据Audio Listener对象所在的GameObject和Audio Source所在的GameObject判断一下距离和位置来模拟真实世界中的音量近大远小的效果。

    首先,找到我们导入的音乐文件,必须设置为3D音乐,默认就是。当然如果是2D的音乐就不会有近大远小的效果了。

    我们新建一个场景,添加3个GameObject,给第一个添加一个Audio Listener组件,其它两个添加Audio Source组件并赋予两个音乐文件。

    移除Main Camera上的Audio Listener组件,按照下面的位置摆放一下这3个组件。

    运行游戏,返回Scene视窗,拖拽Audio Listener组件的位置,就可以感受到好比在两个音响之间移动的效果了。

    (对于每个Audio Source声音可传递的距离可以通过拖拽其球形的线条进行调整。)

    Resources加载

    这里我们看看通过代码如何实现音乐的控制和播放。

    我们把我们的音乐文件放到Resources文件夹中,新建一个场景和一个GameObject,并将下面的脚本添加到这个GameObject上即可:

    复制代码
     1 using UnityEngine;
     2 
     3 public class ResourcesDemo : MonoBehaviour
     4 {
     5     private AudioSource _audioSource;
     6 
     7     void Start()
     8     {
     9         //添加 Audio Source 组件
    10         _audioSource = this.gameObject.AddComponent<AudioSource>();
    11 
    12         //加载 Audio Clip 对象
    13         AudioClip audioClip = Resources.Load<AudioClip>("bgm");
    14 
    15         //播放
    16         _audioSource.loop = true;
    17         _audioSource.clip = audioClip;
    18         _audioSource.Play();
    19     }
    20 }
    复制代码

    运行就可以听到声音了。

    AssetBundle加载

    音乐在AssetBundle中又该如何控制和播放呢?

    首先我们需要通过脚本对文件进行打包。

    复制代码
     1 using UnityEditor;
     2 using UnityEngine;
     3 
     4 public class AssetBundleCreator
     5 {
     6     [MenuItem("Demo/CreateAssetBundle")]
     7     private static void CreateAssetBundle()
     8     {
     9         BuildPipeline.BuildAssetBundle(null, new []
    10             {
    11                 AssetDatabase.LoadMainAssetAtPath("Assets/Audio/bgm.ogg"),
    12                 AssetDatabase.LoadMainAssetAtPath("Assets/Audio/sound.ogg")
    13             },
    14             Application.streamingAssetsPath + "/Audio.assetbundle",
    15             BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.UncompressedAssetBundle,
    16             BuildTarget.StandaloneWindows64);
    17     }
    18 }
    复制代码

    接下来新建一个场景和一个GameObject,并将下面的脚本添加到这个GameObject上即可:

    复制代码
     1 using UnityEngine;
     2 
     3 public class AssetBundleDemo : MonoBehaviour
     4 {
     5     private AudioSource _audioSource;
     6 
     7     void Start()
     8     {
     9         AssetBundle assetBundle = AssetBundle.CreateFromFile(Application.streamingAssetsPath + "/Audio.assetbundle");
    10 
    11         //添加 Audio Source 组件
    12         _audioSource = this.gameObject.AddComponent<AudioSource>();
    13 
    14         //加载 Audio Clip 对象
    15         AudioClip audioClip = assetBundle.Load("sound", typeof(AudioClip)) as AudioClip;
    16 
    17         //播放
    18         _audioSource.loop = true;
    19         _audioSource.clip = audioClip;
    20         _audioSource.Play();
    21     }
    22 }
    复制代码

    Play和PlayOneShot的区别

    AudioSource播放声音提供了两种方法,分别如下:

    public void Play(ulong delay = 0);
    public void PlayOneShot(AudioClip clip, float volumeScale = 1.0F);

    那么这两个方法有啥区别呢,或者说在什么样的情况下应该使用哪个方法呢?

    我们先看看Play方法,该方法可以和其它方法配合使用,比如Pause(暂停)和Stop(停止),播放的是clip属性对应的Audio Clip对象,同一时刻只会有一个clip音乐进行播放。如果要同时使用Play方法播放两个音乐就需要再添加一个Audio Source对象了。

    而PlayOneShot是指马上播放一个音乐且只播放一次,同时Pause和Stop对其无效,如果我们调用该方法播放多次音乐,则多个音乐会同时被播放出来。

    使用场景

    Play方法适合播放背景音乐,因为背景音乐同一时刻只会有一个再播放,而且还需要可以控制其播放和暂停等。

    PlayOneShot方法适合播放音效,因为音效一般只会播放一次且不需要其它的控制,同时多个音效播放时是可以共存的,即可以听到多个声音。

    源文件下载

    http://pan.baidu.com/s/1eQCW7AE

    天道酬勤,功不唐捐!
    展开全文
  • 我使用的是unity3d 4.6 在添加音频之前,你的电脑里要有音频,可以随便下载一首,这里我只讲怎么实现功能, 下载的音频最好放在英文目录下,并且你要记得路径,这样才可以右击asset然后import你想要的音频。 ...

    我使用的是unity3d 4.6

     

     在添加音频之前,你的电脑里要有音频,可以随便下载一首,这里我只讲怎么实现功能,

    下载的音频最好放在英文目录下,并且你要记得路径,这样才可以右击asset然后import你想要的音频。

     

    1、找到hierarchy窗口中的main camera,右击main camera选中Audio中的Audio source,

    Audio Source 是表示音源的意思,需要添加音频文件

    Audio Clip是音频的编辑器,可以剪切等等

    inspector中Audio Clip一项为None为无音频(所有可添加的素材的项在未添加素材时基本上都是None,如果不想使用某个素材了,也可以通过修改成None 来除去)

     

    2、点击该红框右侧的小圆,将出现Select AudioClip窗口

    这是我保存在New Unity Project中Assets文件的两首歌,Project框会自动(好像是自动的吧)读取。

    双击需要的音乐,这样音乐就添加到Main Camera里了,同样的把Main Camera换成cube 等等都是可以的。这样音乐就添加好了。

    注意:

    **如果音乐太短,想连续重复播放,勾选Audio Source中的Loop(循环)就OK了。

    **Pitch(音调的意思)选项不要改成负值,我就是因为不认识这个选项,设置成了负数导致运行时没声音。

     

    转载于:https://www.cnblogs.com/miaoqianling/p/8592878.html

    展开全文
  • 网上大多数Unity教程只讲述了如何在Unity里播放音乐,如何通过拖拽添加音频文件之后就没有继续了 但在游戏中有时候一个对象需要播放好几种声音,这个时候我们就需要用代码进行控制,教程上推拽给AudioClip赋值的...
  • Unity3D音频播放 动态加载组件
  • 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: 多种播放音效的方式 AudioListener组件默认绑定在主摄像机上,这个...
  • 泰课在线课程笔记
  • 对于Unity3D音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下。 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击,开枪...
  • Unity3D-声音系统

    2020-01-23 17:53:09
    1.Unity3D支持的音频文件 mp3、ogg、wav、aif、mod、it、s3m、xm。 2.声音分为2D,3D两种 3D声音:有空间感,近大远小; 2D声音:适合做背景音乐。 3.在场景中产生声音,主要有两个总要的组件: Audio Listener...
  • 前天打包时,碰到了这样的问题:生成android APK包时,勾选和非勾选developmentbuild选项,在真机上测试时,不同机型表现不同; 二:现象如下 三星的表现完成正常,小米和酷派却是下面的画面:即显示主...
  • 在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击、爆炸之类)的音量,这时我们可以用Audio Mixer来解决。 如果文章中有哪些地方写的不对, 欢迎指出。   提醒 ...
  • unity3d—&gt;Asset,会看到处理后的音频文件。在模型上添加Audio Source组件,在相机上添加Audio Listener组件。(具体步骤百度) 2、在按钮点击响应事件中写入相应的动作 using UnityEngine; using ...
  • 1、unity3D简介Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。2、unity3D特点...
  • 步骤一:准备素材先到Unity3d Asset store 下载survival shooter的素材 https://www.assetstore.unity3d.com/cn/#!/search/page=1/sortby=relevance/query=survival&shooter友情提醒:Asset store 资源包下载的默认...
1 2 3 4 5 ... 20
收藏数 421
精华内容 168
关键字:

unity3d 音乐的勾选