版本
menu_open
Wwise Unity Integration Documentation
DLC 打包基础教程

在本例中,我们将展示如何将某些素材(如新的物品或角色)分开存放到使用 Addressables 打包的对应 DLC 素材包中。

安装 Addressables Demo Scene

若尚未在工程中设置 Wwise Unity Addressables Package,请参照 Wwise Unity Addressables Package 安装和设置说明 页面所述进行设置。

本教程中所用 Addressables Demo Scene 的官方存储目录为 https://github.com/audiokinetic/WwiseUnityAddressablesDemoScene。 该 Demo Scene 会用到 Unity Demo Game 中的素材,因此必须先通过 Audiokinetic Launcher 予以安装。

步骤:

  • 通过 Audiokinetic Launcher 安装最新 Unity Demo Game(版本不低于 2021.1.0)。
  • 将 Wwise Unity Addressables Demo Scene 克隆到所用电脑上。
  • 在 Unity 中打开 Demo Game。
  • 在 Unity Package Manager 中,将 Wwise Unity Addressables Package 添加到工程中(详见 通过 Unity Package Manager 和 GitHub 安装 Wwise Addressables Package 章节)。
  • 最后,使用 Package Manager 中的 Add package from disk 选项添加 Wwise Unity Addressables Demo Scene 数据包。
备注: 此数据包无法通过 Add package from git URL 来添加,因为这样安装的话会无法打开数据包中包含的场景。

快速入门

我们专门为此教程在 Wwise 工程中创建了两个音效、两个 Event 和一个 SoundBank。

我们使用 AkBankAkEvent 组件创建了两个 GameObject Prefab:DlcAssetHighImpact 和 DlcAssetLowImpact。 这两个 Prefab 会加载 “DLC” SoundBank,并在实例化时播放对应的音效。

除此之外,我们还创建了两个场景:AddressablesDemoScene 和 AddressablesSubScene。 AddressablesDemoScene 是个简单的 Unity 场景,里面包含了一些互动按钮,方便测试 Addressables 素材的加载和卸载。 AddressablesSubScene 则是个仅包含 “DlcAssetLowImpact” Prefab 的场景。我们可使用其来对“通过 Addressables 加载包含 Wwise 对象的场景”进行测试。

备注: AddressablesDemoScene 还包含一个有关如何借助 Wwise Addressables Package 使用本地化语音并更改语言的示例。

所有这些素材以及下节所述脚本均存放在 WwiseUnityAddressablesDemoScene 数据包中。

您可以通过在对应 Inspector 中启用 Addressable 复选框来将以下三项标记为 Addressables 素材:

  • AddressablesSubScene.unity
  • Prefabs/DlcAssetHighImpact.prefab
  • Prefabs/DlcAssetLowImpact.prefab
注意: 若从工程中移除 Unity Addressables Package,则将从所有素材移除 Addressable 字段。在重新安装该数据包时,并不会保留该复选框的状态。

Addressables Groups 窗口内,可看到 Default Local Group 中默认替换了这些 Addressables 素材。

如需创建新的分组,可右键单击 Addressables Groups 窗口并选择 Create New Group,或从菜单中依次选择 Create > Group > Packed Assets。 为 DLC 素材创建两个新的分组:

  • DLC_Assets – 用于 Prefab 和子场景。
  • DLC_WwiseData_Windows – 用于平台专用 Soundbank 素材。
备注: 在本例中,我们只为 Windows 平台创建了一个附加 SoundBank 分组。不过,一般来说每个所要部署到的平台都要创建一个。
  • 将 DlcAssetHighImpact、DlcAssetLowImpact 和 AddressablesSubScene 从 Default Local Group 移到 DLC_Assets 分组。
  • 将平台专用 “DLC” SoundBank 素材从 WwiseData_Windows 移到 DLC_WwiseData_Windows 分组。
备注: 我们确保了会在平台专用分组名称中包含字符串 WwiseData 和平台名称 Windows,以便在构建 Addressables 时由 BuildWwiseData 脚本正确地进行处理。

在 Addressables Groups 窗口中,将 Play Mode Script 设为 Use Existing Build,并通过 Wwise Build Script 构建新的 Addressables 数据包(如 构建工程 章节所述)。

现在,打开 AddressablesDemoScene。

通过 Addressables 加载素材

在此场景中,有两个按钮:

  • 左侧按钮用于通过 Addressables 加载 “DlcAssetHighImpact” Prefab 并将其实例化。
  • 右侧按钮用于加载 AddressableSubScene 并将其实例化。
  • 此场景包含 DlcAssetLowImpact 素材。

若检视 “Loading DLC Assets Demo” GameObject,会看到我们创建了一个 AssetLoader 对象,并且其包含 AddressablePrefabLoader 组件。

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressablePrefabLoader : MonoBehaviour
{
public AssetReference reference;
public void Load()
{
Addressables.LoadAssetAsync<GameObject>(reference).Completed += asyncOp =>
{
if (asyncOp.Status == AsyncOperationStatus.Succeeded)
{
Instantiate(asyncOp.Result,this.transform);
}
};
}
}

此组件包含 AssetReference。我们已在对应 Inspector 中将其设为 “DlcAssetHighImpact” Prefab。

在运行游戏并按下左侧按钮时,将调用 AddressablePrefabLoader 上的设定 Load 方式:从 DLC_Assets 加载,并将 “DlcAssetHighImpact” Prefab 实例化。 一旦实例化,AkBank 组件便会从 DLC_WwiseData_Windows 素材包加载 SoundBank。

通过 Addressables 加载场景

若检视 “Loading DLC Scene Demo” GameObject,会看到我们创建了一个 SceneLoader 对象,并且其包含 AddressableSceneLoader 组件。

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
public class AddressableSceneLoader : MonoBehaviour
{
public AssetReference scene;
private AsyncOperationHandle<SceneInstance> sceneHandle;
public void Awake()
{
DontDestroyOnLoad(gameObject);
}
public void LoadScene()
{
if (!sceneHandle.IsValid() )
{
scene.LoadSceneAsync( LoadSceneMode.Additive).Completed += SceneLoadComplete;
}
else
{
UnloadScene();
}
}
public void UnloadScene()
{
Addressables.UnloadSceneAsync(sceneHandle).Completed += op =>
{
if (op.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("Successfully unloaded scene");
}
};
}
private void SceneLoadComplete(AsyncOperationHandle<SceneInstance> obj)
{
sceneHandle = obj;
if (obj.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log(obj.Result.Scene.name + " successfully loaded");
}
}
}

此组件使用 AssetReference 保存对 AddressablesSubScene 的引用。 在第一次按下按钮时,会调用 LoadSceneMethod,进而采用 LoadSceneAsync 方式加载场景,并将其添加到当前场景中。 在第二次按下按钮时,将卸载场景。

AddressablesSubScene 仅包含 “DlcAssetLowImpact” Prefab,其在实例化时会加载 “DLC” Soundbank 并播放对应的 Event。

更改语言

在此场景中的第三个示例中,可在 English 和 French 之间切换语言,并播放本地化声音样本。 此示例使用 AkWwiseSetLocalization 脚本。在按下绿色或蓝色按钮时,会调用 AkAddressableBankManager.SetLanguageAndReloadLocalizedBanks 函数,并将语言更改为 English 或 French。

此函数执行以下操作:

  • 卸载所有本地化 SoundBank
  • 卸载 Init SoundBank
  • 使用 AkSoundEngine.SetCurrentLanguage 设置语言
  • 重新加载 Init SoundBank
  • 重新加载本地化 SoundBank
using UnityEngine;
public class AkWwiseSetLocalization : MonoBehaviour
{
public string LanguageString;
public void SetLanguage()
{
Debug.Log($"Setting language to {LanguageString}");
AK.Wwise.Unity.WwiseAddressables.AkAddressableBankManager.Instance.SetLanguageAndReloadLocalizedBanks(LanguageString);
}
}

接下来便可构建 AddressablesDemoScene 并测试按钮,以此确保构建好的游戏能够正常加载这些素材。

设置 Addressables Hosting

下面我们来配置 Unity 以使用内置托管服务处理 Addressables DLC 素材。这样无需重新构建玩家内容便可对“通过 Addressables 更新素材”进行测试。

首先,构建 AddressablesDemoScene,并确保其能够正常工作。 在构建窗口中,须通过 Add open scenes 按钮添加 AddressablesDemoScene,并选择将其作为所要构建的场景。

接着,我们来配置 Addressables Hosting(可从 Tools 菜单访问)。

下面来创建 Local Hosting 服务,并选中 Enable 复选框以启用该服务。

通过菜单打开 Addressables Profiles 窗口 (Profile > Manage Profiles),并新建一个名为 Editor Hosted 的配置文件。

然后,将 Path 分别设为:

  • LocalBuildPath:HostedData/[BuildTarget]
  • LocalLoadPath:http://[PrivateIpAddress]:[HostingServicePort]
  • RemoteBuildPath:HostedData/[BuildTarget]
  • RemoteLoadPath:http://[PrivateIpAddress]:[HostingServicePort]

然后,通过右键单击 Editor Hosted 并选择 Set Active 来激活此配置文件。

备注: 有关如何使用 Addressables 托管服务的详细信息,请参阅官方文档

检视 DLC_WwiseData_Windows 分组素材,并确保已更新其 Build Path 和 Load Path。

打开 Addressable Asset Settings,并启用 Build Remote Catalog 。分别将 Build Path 和 Load Path 设为 LocalBuildPath 和 LocalLoadPath。

使用 Wwise Build Script 重新构建 Addressables 素材。注意要在 <Unity Project Path>\HostedData 下创建新的 Addressables 素材包。

接下来重新构建 AddressablesDemoScene 以测试是否能够正常处理素材。

打开 Addressables Hosting 窗口,来在运行游戏时查看传入请求。在第一次按下按钮时,窗口底部的事件日志中应会显示请求。

更新 Addressables 素材

下面我们来使用 Addressables 更新 DlcAssetHighImpact 音效。

首先,在 Wwise 中调节 imp_axe_stone_high 声音样本的 Pitch 值来使变化更加明显。然后,重新生成 SoundBank。

然后,在 Addressables Groups 窗口中依次选择 Build >Update a previous build。在打开的选择窗口中,在 AddressableAssetsData/Windows 下选择 addressables_content_state.bin 文件。

最后,再次运行构建好的游戏(无需重新构建)。在打开时,应会在 Addressables Hosting 窗口中看到目录更新请求。

这时按下左侧按钮,应会听到按照新 Pitch 值播放的音效。

有关 Addressables 目录和预定开发周期的详细信息,请参阅官方文档

备注: 此教程中提供的脚本仅可满足对“通过 Addressables 加载素材”进行测试的最低要求。 在自己的工程中加载素材时,最好选用更为稳妥的解决方案。 如需查看更多进阶示例,请转至 Unity Addressables Sample 存储库。
Definition: AkWwiseAcousticTexture.cs:20
Definition: AkWwiseAcousticTexture.cs:20

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅