6.Unity3D热更新-LuaFramework-声音管理器
来源:互联网 发布:摇一摇截图软件大全 编辑:程序博客网 时间:2024/04/30 03:21
本文固定链接:http://blog.csdn.net/u013108312/article/details/53945121
1、使用方法
SoundManager估计是从其他地方拷过来的,并不能很好的与框架结合,这里我们先看看原来的SoundManager的使用方法,再介绍它的不足之处及改进方法。虽然SoundManager定义了好几个方法,但能直接在lua中使用的只有用于播放背景音乐的PlayBacksound。
把声音文件放到Resource目录下,由于SoundManager使用Resources.Load加载声音文件,声音文件必须放到这个目录下。
然后编写lua代码,调用soundMgr:PlayBacksound即可,它的第一个参数指明Resource目录下的文件名,第二个参数为true表示开始播放,false表示停止播放。
--主入口函数。从这里开始lua逻辑function Main() LuaHelper = LuaFramework.LuaHelper; soundMgr = LuaHelper.GetSoundManager(); soundMgr:PlayBacksound("testsound", true)end
运行游戏,即可听到音效。
2、改进的声音管理器
这一部分我们需要改进声音管理器,实现这么几个功能:
1)从本地“数据目录”读取打包后的声音文件,使它支持热更新;
2)添加播放/停止背景音乐的PlayBackSound/StopBackSound和播放音效的PlaySound方法;
3)使用缓存存储加载后的声音文件,以提高运行效率。
为了支持加载AudioClip的加载,在ResourceManager中添加LoadAudioClip方法,该方法将会加载资源包abName的资源assetName,加载完AudioClip资源后调用回调函数func,代码如下。
//载入音效资源public void LoadAudioClip(string abName, string assetName, Action<UObject[]> func) { LoadAsset<AudioClip>(abName, new string[] { assetName }, func);}
修改SoundManager,使用Hashtable类型的sounds存储加载后的声音,包含PlayBackSound、StopBackSound和PlaySound三个API。代码如下所示。
using UnityEngine;using System.Collections;using System.Collections.Generic;namespace LuaFramework { public class SoundManager : Manager { private AudioSource audio; private Hashtable sounds = new Hashtable(); string backSoundKey = ""; void Start() { audio = GetComponent<AudioSource>(); if (audio == null) { gameObject.AddComponent<AudioSource>(); } } //回调函数原型 private delegate void GetBack(AudioClip clip, string key); //获取声音资源 private void Get(string abName,string assetName,GetBack cb) { string key = abName + "." + assetName; if (sounds[key] == null) { ResManager.LoadAudioClip(abName, assetName, (objs) => { if (objs == null || objs[0] == null) { Debug.Log("PlayBackSound fail"); cb(null, key); return; } else { sounds.Add(key, objs[0]); cb(objs[0] as AudioClip, key); return; } }); } else { cb(sounds[key] as AudioClip, key); return; } } //播放背景音乐 public void PlayBackSound(string abName, string assetName) { backSoundKey = abName + "." + assetName; Get(abName, assetName, (clip, key) => { if (clip == null) return; if (key != backSoundKey) return; audio.loop = true; audio.clip = clip; audio.Play(); }); } //停止播放音乐 public void StopBackSound() { backSoundKey = ""; audio.Stop(); } //播放音效 public void PlaySound(string abName, string assetName) { Get(abName, assetName, (clip, key) => { if (clip == null) return; if (Camera.main == null) return; AudioSource.PlayClipAtPoint(clip, Camera.main.transform.position); }); } }}
修改代码后,需要重新生成wrap文件(点击菜单栏的Lua→Clear wrap files和Lua→Generate All)。然后编写lua代码调试它吧!这里演示的是先播放背景音乐,3秒后停止播放,每隔0.3秒播放一次音效的功能。
--主入口函数。从这里开始lua逻辑function Main() LuaHelper = LuaFramework.LuaHelper; soundMgr = LuaHelper.GetSoundManager(); soundMgr:PlayBackSound("sound", "testsoundbg") UpdateBeat:Add(Update, self)endlocal lastTime = 0function Update() if Time.time > 3 then soundMgr:StopBackSound(); end if Time.time - lastTime > 0.3 then soundMgr:PlaySound("sound", "testsoundshoot") lastTime = Time.time endend
本文固定链接:http://blog.csdn.net/u013108312/article/details/53945121
- 6.Unity3D热更新-LuaFramework-声音管理器
- 1.Unity3D热更新-LuaFramework
- Unity3D热更新LuaFramework入门实战
- 4.Unity3D热更新-LuaFramework-Lua组件
- 5.Unity3D热更新-LuaFramework-UI
- Unity3D热更新LuaFramework入门实战
- 2.Unity3D热更新-LuaFramework-使用lua创建物体
- 3.Unity3D热更新-LuaFramework-编写Lua逻辑
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(十一):实践
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(八):更新下载(上)
- [Unity热更新]tolua# & LuaFramework(十四):更新下载(中)
- [Unity热更新]tolua# & LuaFramework(十五):更新下载(下)
- [Unity热更新]tolua# & LuaFramework(二):打包工具
- [Unity热更新]tolua# & LuaFramework(四):读取数据
- [Unity热更新]tolua# & LuaFramework(五):.proto转换为.lua
- Eclipse打不开。The Eclipse executable launcher was unable to locate its companion shared library
- 深入理解Java-Volatile关键字
- Qt设置窗口及窗口相关操作详解
- hadoop体系结构
- sqlserver 中批量删除\r\n 换行符
- 6.Unity3D热更新-LuaFramework-声音管理器
- 数据质量管理十步流程
- ImportError: No module named 'urllib2'
- 强大实用的jQuery幻灯片插件Owl Carousel
- 记单词018
- 亚马逊 机器学习 服务 的实例 基本操作 -- 自定义ML模型
- 文章标题
- java内存区域与内存溢出异常
- 2分钟上手Echarts