栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

WwiseUnity接入

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WwiseUnity接入

Unity使用Wwise实现音效

首先使用Wwise Launcher 将Wwise集成到项目中
在集成的时候无法识别中国版的Unity 必须要翻墙下载国外版的Unity
但这并不意味着必须要使用国外版的Unity进行项目开发,只需要在集成的时候使用与项目开发所使用的Unity版本相同的国外版的Unity进行集成即可,以本人所做的项目为例,使用的是Unity2020.3.11f1c1,本人在集成的时候所使用的是2020.3.11f1版本,之后继续使用f1c1版本进行项目开发,并没有出现错误

通过此选项来进行集成

在Unity中使用Wwise播放音效有两种实现方式

  1. 第一种方式是直接通过挂载脚本进行加载Bank文件,然后通过AkEvent来加载Event的方式进行播放
    此种方式简单暴力,但是不宜维护,如果是多个Event进行播放则脚本管理起来比较麻烦,如下图所示

  2. 第二种方式则是使用脚本进行注册和加载,本人采用的是此种方式进行加载
        const float minRTPCValue = 0f;
        const float maxRTPCValue = 100f;

        GameObject globalGameObject;

        public void Init()
        {
            globalGameObject = new GameObject("Global Audio");
            GameObject.DontDestroyOnLoad(globalGameObject);
            AkSoundEngine.RegisterGameObj(globalGameObject, globalGameObject.name);
        }

        public void LoadBank(string name)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl LoadBank name is null");
                return;
            }
            AkBankManager.LoadBank(name, false, false);
        }

        public void UnloadBank(string name)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl UnloadBank name is null");
                return;
            }
            AkBankManager.UnloadBank(name);
        }

        public void Play(string name)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl Play name is null");
                return;
            }
            Play(name, globalGameObject);
        }

        public void Play(string name, GameObject go)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl Play name is null");
                return;
            }
            AkSoundEngine.PostEvent(name, go);
        }

        public void PlayAtGameObjectPosition(string name, GameObject go)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl PlaySoundAtGameObjectPosition name is null");
                return;
            }
            if (go == null)
            {
                Debug.LogError("AudioServiceImpl PlaySoundAtGameObjectPosition go is null:" + name);
                return;
            }

            if (AkSoundEngine.RegisterGameObj(go, go.name) != AKRESULT.AK_Success)
            {
                Debug.LogError("AudioServiceImpl PlaySoundAtGameObjectPosition go is register failed:" + name + "  " + go.name, go);
                return;
            }
            AkSoundEngine.SetObjectPosition(
                            go,
                            go.transform.position.x,
                            go.transform.position.y,
                            go.transform.position.z,
                            go.transform.forward.x,
                            go.transform.forward.y,
                            go.transform.forward.z,
                            go.transform.up.x,
                            go.transform.up.y,
                            go.transform.up.z);

            Play(name, go);
            AkSoundEngine.UnregisterGameObj(go);
        }

        public void Stop(string name)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl Stop name is null");
                return;
            }
            Stop(name, globalGameObject);
        }

        public void Stop(string name, GameObject go)
        {
            if (name.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl Stop name is null");
                return;
            }
            AkSoundEngine.ExecuteActionOnEvent(name, AkActionOnEventType.AkActionOnEventType_Stop, go, 300, AkCurveInterpolation.AkCurveInterpolation_Linear);
        }

        public void SetRTPC(string rtpc, float value)
        {
            if (rtpc.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl SetRTPC rtpc is null");
                return;
            }
            AkSoundEngine.SetRTPCValue(rtpc, Mathf.Clamp(value, minRTPCValue, maxRTPCValue));
        }

        public void SetState(string group, string state)
        {
            if (group.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl SetState group is null");
                return;
            }
            if (state.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl SetState state is null:" + group);
                return;
            }
            AkSoundEngine.SetState(group, state);
        }

        public void SetSwitch(string group, string value, GameObject go)
        {
            if (group.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl SetSwitch group is null");
                return;
            }
            if (value.isNullOrEmpty())
            {
                Debug.LogError("AudioServiceImpl SetSwitch value is null:" + group);
                return;
            }
            if (go == null)
            {
                Debug.LogError("AudioServiceImpl SetSwitch go is null:" + group + "  value:" + value);
                return;
            }
            AkSoundEngine.SetSwitch(group, value, go);
        }
    }

此脚本中包含了注册,播放,加载Bank文件和卸载Bank文件以及各种切换,音量控制等函数,经过测试,加载和播放是完全可以实现的,其他的函数暂时还没有进行使用,都是WwiseSDK中提供的接口,之后在使用的时候会进行研究
以上是本次Wwise音效接入的一点总结,有不足之处还请大家指出,一定改正

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号