UNITY PlayClipAtPoint用法

16 篇文章 0 订阅

今天折腾了一天3D音效,把脚本直接挂载怪物身上总觉的不合适,用相机的audioSource切换一直出现卡顿现象。最后终于靠PlayClipAtPoint救了一命。
下面介绍一下该函数以及如何使用多个AudioSource。
————————————————————————————————
游戏中的声音通常可以分为音乐和音效,音乐通常时间较长,且需要循环播放,音效则时间较短,不需要循环播放。

播放声音的方式常见有两种:

1.建立一个空物体,为每一个音乐或音效添加AudioSource,给每个AudioSource添加相应的声音剪辑,播放时,获取各个AudioSource组件来播放声音。

2.建立一个空物体,添加一个AudioSource用来播放背景音乐;再添加一个Audiosource,用来播放音效,该组件的Audio Clip属性,在运行时根据需要播放的声音,赋予不同的声音剪辑,以此实现一个AudioSource,播放多个音效。这种方法的问题是,当有多个音效需要同时播放时,后播放的音效会终止先播放的音效。解决办法:给所有音效分组,不可能同时播放的音效为一组,再为每一组音效添加一个AudioSource。

还有一种方法:static void PlayClipAtPoint(AudioClip clip,Vector3 position, float volume = 1.0F);

使用AudioSource.PlayClipAtPoint播放声音,会自动生成一个名为”One shot audio”的物体,并自动添加了AudioSource和相应的audioclip,同时播放多个声音时会生成多个同名的物体,各声音的播放互不影响,但缺点是只能设置音量,位置,不能设置loop(当然也不是不能实现的,只是比较麻烦),还有一些特殊的声音效果也不易实现,只能播放一次,播放完成后,One shot audio自动销毁。
(其实这个函数还有个缺点,就是音量最大为1f,还不能设置播放半径,导致播放出来的声音太小了,如此矫枉过正也达不到3D的效果,目前我的弥补办法是,计算出播放点与相机之间的向量,然后取这个向量的0.x倍的位置播放音效,一定程度上可以弥补声音小的缺陷,如果谁有更好的解决办法欢迎留言)

int index=0;
public AudioClip[] clips;
void Start()
{
    index=0;
    InvokeRepeating("PlaySound",2.0f,0.5f);
}
void PlaySound()
{
    if(index<clips.Length)
    {
        AudioSource.PlayClipAtPoint(clips[index],Vector3.zero,1.0f);
        index++;
    }

}

所以可以看出,在只需要播放简单的音效时,可以使用PlayClipAtPoint来播放,不需要添加AudioSource,不需要获取各个AudioSource的引用,就可以直接播放声音。

文章转自http://www.manew.com/blog-12062-141.html

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值