CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
[CriAtom] In-game preview(在游戏中预览) (弹球demo)

范例描述

Overview

cri4u_samples_criatom_scene07_game_mini.png

此为CRI ADX中 in-game preview(在游戏中预览)的demo。
这是一个弹球游戏的demo版本。
你可以在Setting中更改背景音乐与音效。

In-game preview

从Unity Editor中,你可以从CRI Atom Craft连接至in-game preview来确认播放的声音数量。
你同样可以更改回放的位置和参数。
尽管当数据大小由编辑更改时需要重新传送数据,你同样可以替换一个波形数据(上限至in-game的填充大小)。
如需了解更多有关in-game preview的信息,请查看 " 游戏内预览(In-Game Preview) "。

In-game preview的数据

如果你想再次建立ACF以及ACB,请确保选中in-game preview选项并将文件复制至Asset。

注意
不是为in-game preview指定建立的ACF以及ACB文件,将无法通过in-game连接与工具运作。
只有使用in-game preview选项来建立的ACF和ACB文件,才能成立与CRI Atom Craft项目的连接。

声音的中央控制

CriAtomSource 组件粘贴于编辑器中。 当声音资源太多时,播放一个声音所需的操作数量可使运作变得过于麻烦。
因此,该范例将回放函数封装至对编程师友善的调用。
举例: PlayBGM() ... 播放背景音乐

声音的动态变化

你可以在Setting中更改背景音乐以及音效。
你也可以动态地更改声音,因为回放是间接执行的。
举例,点击屏幕上的Setting以更改音效和背景音乐。

声音系统封装的优点

如隐藏声音系统,那么对脚本做出十分微小的更改也可以优化/更正声音。

[例子]
你可以切换至Unity的标准声音系统。
(此范例不包含Unity的标准声音系统过程。)

In-game preview的流程

  • (1) 启动"CRI Atom Craft"。
  • (2) 从File - Open project目录中,打开以下项目文件:
    • [CRI Atom Craft app 文件夹]/example/pinball/Pinball.atmcproj
  • (3) 设置即将运行范例的电脑的IP地址。
    • (3-1) 从Tools -> Properties目录中,调用Properties对话框。
    • (3-2) 在Properties对话框中,选择Target -> PC标签。
    • (3-3) 在Preview setting -> IP address中,设置即将运行范例的电脑的IP地址。
  • (4) 按下F10按键以开始in-game preview。

    注意
    如需更多有关in-game preview的详细信息,请查看 " 游戏内预览(In-Game Preview) "。

场景信息


中间件 CRI ADX (CRI Atom) 注释
范例 基础范例
存储路径 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/basic/
场景文件 Scene_07_Ingame_Pinball.unity
脚本文件 Scene_07_Ingame_Pinball_PlayBounce.cs 该脚本在检测到撞击时将播放声音。
它调用了SoundManager中的一个函数。
脚本文件 Scene_07_Ingame_Pinball_SoundManager.cs 该脚本管理了声音处理。
ACF文件 Pinball.acf
AC文件 PinballMain.acb


程序描述

一个项目来管理声音资源

我们推荐一个Unity项目使用一个CRI Atom Craft项目。
当标题使用多个CRI Atom Craft项目时需要进行一些额外的配置。

该范例使用了为了CRI Atom Craft中的in-game 而建立的ACF和ACB文件(Pinball.acf and PinballMain.acb)。
它使用了与其他范例不同的CRI Atom Craft项目。
(其他范例共享 DemoProj.acf 以及 DemoProj.acb 。)
比如当你想要用下载的内容来替换ACF和ACB时,它同样为true。

[SoundManager]对象

它设置了管理ACF和ACB文件的 CriAtom 组件。

管理声音回放的 CriAtomSource 组件在脚本的Awake()函数中建立。
如调用PlayBounce()函数,将进行初始化(类别的音量,DSP母线的配置,以及回放背景音乐的应用)。
在in-game连接时(此时必须更新二进制),当ACF和ACB文件大小被编辑更改,该函数将被调用。但请确保音乐将继续播放。
(* 在未来的版本中,我们计划提供合适的回调,如在in-game preview途中更新事件。)

从脚本中获取ACB信息

该范例使用了脚本来获取ACB上的信息,而其他范例使用 CriAtomProjInfo_Unity.cs(Unity信息文件)来完成这项工作。
CriAtomProjInfo_Unity.cs文件输出有关一个CRI Atom Craft项目的信息。它无法拥有关于多个项目的信息。
(* 与AtomCraft工具必须是一对一的对应。)

尽管该范例仅获得cue名称,但它拥有更多可用的信息。 请使用Awake()函数来完成它。

/* 指定你想要从中取得信息的ACB文件名 (即cue sheet名) */
CriAtomExAcb acb = CriAtom.GetAcb(cueSheetName);
/* 创建cue名称的列表*/
CriAtomEx.CueInfo[] cueInfoList = acb.GetCueInfoList();
foreach(CriAtomEx.CueInfo cueInfo in cueInfoList){
cueNameList.Add(cueInfo.name);
}

创建一个 CriAtomSource

该范例从脚本中创建了一个 CriAtomSource 组件,而其他范例在组件在Unity Editor生成后指定它。

在Unity Editor中,需要的 CriAtom 组件(CRIWARE对象)将被自动创建。
然而当使用脚本时,它不会被自动创建。因此你必须添加 CriAtom 组件,并且在Unity Editor中配置ACF以及ACB。
(* 在未来的版本中,我们计划提供仓脚本中创建 CriAtom 组件的方法。)

/* 用于弹跳声的AtomSource */
private CriAtomSource atomSourceBounce = null;
/* 用于背景音的AtomSource */
private CriAtomSource atomSourceBGM = null;
/* 创建用于弹跳声的AtomSource */
atomSourceBounce = gameObject.AddComponent<CriAtomSource>();
atomSourceBounce.cueSheet = cueSheetName;
atomSourceBounce.cueName = cueNameList[(int)enumCueNameList.wood + seNo];
/* 创建用于背景音的AtomSource */
atomSourceBGM = gameObject.AddComponent<CriAtomSource>();
atomSourceBGM.cueSheet = cueSheetName;
atomSourceBGM.cueName = cueNameList[(int)enumCueNameList.bgm0 + bgmNo];

播放一个 CriAtomSource

调用PlayBounce()函数将播放声音。
你可以从内部调用它,因为它是一个公共函数。
在该范例中,它是从Scene_07_Ingame_Pinball_PlayBounce调用的。

[Source:Scene_07_Ingame_Pinball_SoundManager.cs]
/* 弹跳声 */
public void PlayBounce()
{
/* 设置cue名称 */
atomSourceBounce.cueName = cueNameList[(int)enumCueNameList.wood + seNo];
/* 播放 */
atomSourceBounce.Play();
}

[Suorce:Scene_07_Ingame_Pinball_PlayBounce.cs]
private Scene_07_Ingame_Pinball_SoundManager soundManager = null;
void Start()
{
/* 获取SoundManager */
soundManager = FindObjectOfType(typeof(Scene_07_Ingame_Pinball_SoundManager)) as Scene_07_Ingame_Pinball_SoundManager;
}
/* 在撞击时播放 */
void OnTriggerEnter(Collider other)
{
/* 在撞击时播放声音 */
soundManager.PlayBounce();
/* 如果背景音停止了,重新播放它 */
soundManager.ResumeBGM();
}

在in-game preview时替换ACF和ACB文件

如果ACF或ACB文件在in-game preview的途中被替换了,那么正在播放的声音将被停止,类别的音量也将被重置。
背景音乐必须在停止之后重新播放,并且该范例显示了需要在应用程序里做什么,才能重新播放背景音乐。
它同样更新了DSP母线设置以及flag,以在in-game preview的途中管理工具中的电平。

public void ResumeBGM()
{
/* 当回放完成或停止(当ACB更新时自动重置)时播放 */
CriAtomSource.Status status = atomSourceBGM.status;
if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {
/* 播放 */
PlayBGM();
/* 更改"main"类别的音量 */
CriAtom.SetCategoryVolume("main", mainVolume);
/* 附上DSP母线设置 */
CriAtomEx.AttachDspBusSetting("DspBusSetting_0");
/* 在in-game preview时添加电平管理 */
CriAtom.SetBusAnalyzer(true);
}
}