700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > unity简单的脚本 播放3D立体音效(近大远小效果)

unity简单的脚本 播放3D立体音效(近大远小效果)

时间:2021-07-27 10:21:30

相关推荐

unity简单的脚本 播放3D立体音效(近大远小效果)

自制简单的3D音效播放脚本

使用如下

新建场景,

新建空对象,挂载测试脚本testEasyAudio_3D

public class TestEasyAudio_3D : MonoBehaviour{AudioListener audioListener;GameObject leftAudio, rightAudio;private void Awake(){audioListener = FindObjectOfType<AudioListener>();if (audioListener){print("find listener");}leftAudio = new GameObject();leftAudio.transform.position = audioListener.transform.position + new Vector3(-15, 0, 0);rightAudio = new GameObject();leftAudio.transform.position = audioListener.transform.position + new Vector3(15, 0, 0);}private void Update(){if (Input .GetKeyDown (KeyCode.A)){EasyAudio_3D.PlayAudio_3D("testAudio", leftAudio);}if (Input.GetKeyDown(KeyCode.D)){EasyAudio_3D.PlayAudio_3D("testAudio", rightAudio);}}}

上代码

/********************************************************文件: AudioManager.cs作者: 阿飞日期: CreateTime寄语: 虎年 虎虎生威 大吉大利功能: Nothing*********************************************************/using System.Collections.Generic;using UnityEngine;public class EasyAudio_3D{/// <summary>/// 能听到声音的最远距离/// </summary>private const float maxDistance = 30;private static bool isDebug = true;/// <summary>/// 加载内存中的音频文件/// </summary>static Dictionary<string, AudioClip> audioClipDic = new Dictionary<string, AudioClip>();/// <summary>/// 不固定父物体的音频播放器/// </summary>static List<AudioSource> audioSources_3d = new List<AudioSource>();public static void PlayAudio_3D(string audioName, Transform pos, bool follow = false){//找到播放组件AudioSource tmpAudio =GetFreeAudioSource();//找到音频文件AudioClip tmpClip;if (audioClipDic.ContainsKey(audioName)){tmpClip = audioClipDic[audioName];}else{tmpClip = Resources.Load<AudioClip>(audioName);//保存音效audioClipDic.Add(audioName, tmpClip);}//设置音效位置if (follow){tmpAudio.gameObject.transform.parent = pos;tmpAudio .transform.localPosition = Vector3.zero;}else{tmpAudio.gameObject.transform.position = pos.position;}//播放音效tmpAudio.PlayOneShot(tmpClip);if (isDebug){Debug.Log(string.Format("音效播放完成\n总Audio数为:{0}", audioSources_3d.Count.ToString ()));}}/// <summary>/// 获得一个空闲的audioSource/// </summary> private static AudioSource GetFreeAudioSource(){foreach (var item in audioSources_3d){if (! item .isPlaying ){return item;}}return AddAudioSource_3D();}/// <summary>/// 添加3D声音播放组件/// </summary> private static AudioSource AddAudioSource_3D(){GameObject audioObj = new GameObject();audioObj.name = "easyAudio_3D";audioObj.transform.localPosition = Vector3.zero;AudioSource audioSource = audioObj.AddComponent<AudioSource>();//设置audio参数audioSource.spatialBlend = 1;//3D效果//设置为3D效果audioSource.maxDistance = maxDistance;//线性衰减audioSource.rolloffMode = AudioRolloffMode.Linear;audioSources_3d.Add(audioSource);return audioSource;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。