CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
游戏: 弹球

范例描述

概述

使用ADX来为弹球游戏植入声音的范例。

cri4u_samples_criatom_script_game_pinball_main.png

操作

当场景被启动时,弹球游戏将自动开始。
  • Stopper 按钮
    点击它以显示游戏区底端的阻塞器,以阻止弹球丢失。

  • Pause] / Resume 按钮
    Pause(暂停)按钮只在显示阻塞器的情况下可用。
    暂停或继续弹球的移动。

  • Multi Ball 按钮
    这个按钮将添加一个弹球至游戏。它仅在显示阻塞器的情况下可用。
    每点击该按钮一次,就会增加一个弹球。

  • 点击游戏区
    将弹球移动到你所点击的位置。

场景信息


中间件 CRI ADX (CRI Atom)
范例 脚本范例: Game: Pinball(游戏:弹球)
存储路径 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/script/GameSample_Pinball
场景文件 GameSample_Pinball.unity
原始ADX数据 数据:弹球


程序描述

这是一款自动进行的弹球游戏。
当弹球撞到墙壁,缓冲器或目标物时,声音将产生变化。
每当弹球丢失时,音乐同样会产生变化。

游戏控制以及声音控制脚本

该范例包含了两个脚本,一个用于游戏控制,另一个用于声音控制。

用于游戏控制的脚本文件:GameMain/GameMain.cs
用于声音控制的脚本文件:SoundManager/SoundManager.cs
在游戏启动时,GameMain.cs存储SoundManager中的游戏物体,并在需要的时候触发声音回放。<BR> SoundManager.cs简单的启用方式以及它能够生产的多种声音,都显示了使用ADX的优势。

以下部分描述了一些用于控制声音的过程。

当弹球击打墙壁时声音产生变化

由于数据已被配置,因此根据撞击速度,当弹球打到墙壁上时声音会有不同。
有一种AISAC功能可用于改变声音,因此脚本将撞击速度用于AISAC的参数。
如需了解更多关于使用AISAC的信息,请同样查看 " [CriAtom] AISAC " 范例。
public void PlaybackBall(int index,float velocity)
{
if(lastPlaybackBallTime+0.25 < Time.timeSinceLevelLoad){
velocity = Mathf.Min(velocity,1.0f);
atomSourceBall.SetAisac(0,velocity);
atomSourceBall.Play(index);
lastPlaybackBallTime = Time.timeSinceLevelLoad;
lastVelocity = velocity;
}
}

该范例代码同样决定了是否根据时间来播放撞击音效,因为前一个回放阻止了太多撞击音效。

当弹球丢失时随机回放语音

由于数据已被配置,因此如"Wow!"和"I lost it!"的语音将在弹球丢失时被随机播放。
随机化是完全在数据方面配置的。该脚本仅能够触发回放。

public void PlayGameOver()
{
//atomSourceSe.Play(4); // by Cue ID
atomSourceSe.Play("GameOver"); // by Cue Name
}

当弹球击打到缓冲器或目标物体时,声音也将拥有音效。这同样是完全在数据方面配置的,并且在脚本中没有任何指定的参数。

当弹球丢失时更改音乐音量

在弹球丢失后,应用将播放如同"Wow!"的声音线路,而音乐的音量也被临时地调低了。
这强调了声音线路。
音乐音量的更改同样在使用REACT功能时,已在工具中完全设置好了。该脚本仅需触发回放。
如需了解更多关于REACT功能的信息, 请同样查看" [CriAtom] 类别 "范例。

音乐的更改

由于数值已被配置,因此不同的音乐将根据丢失的弹球数量进行播放。
块回放功能将用于更改音乐。脚本将确认当球丢失时播放的块索引,并指定下一个块索引进行播放。
如需了解更多关于块回放的信息,请同样查看 " [CriAtom] 块回放 " 范例。
public void PlayBGM()
{
bool startFlag = false;
CriAtomSource.Status status = atomSourceBgm.status;
if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {
this.playbackBGM = atomSourceBgm.Play(100);
startFlag = true;
}
/* 除第一次以外,其余执行块回放 */
if(startFlag == false){
int cur = this.playbackBGM.GetCurrentBlockIndex();
CriAtomExAcb acb = CriAtom.GetAcb("PinballMain");
if(acb != null){
acb.GetCueInfo("BGM",out this.cueInfo);
cur++;
if(this.cueInfo.numBlocks > 0){
this.playbackBGM.SetNextBlockIndex(cur % this.cueInfo.numBlocks);
}
}
}
}

音乐重新开始控制

SoundManager.cs含有重新播放任何停止的音乐的程序。

public void ResumeBGM()
{
/* 如果回放已完成或停止(当ACB更新时将自动充值),便播放 */
CriAtomSource.Status status = atomSourceBgm.status;
if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {
/* 播放 */
PlayBGM();
}
}
尽管该功能无需在游戏中使用,但我们依然提供它,以方便你使用ADX中的in-game preview功能。
in-game preview功能将CRI Atom Craft连接至正在进行的游戏(在这里为弹球),并允许在进行游戏的途中控制声音。举例,你可以在进行游戏时,调整回音效果以及每个撞击声的音量。
当你为in-game preview将CRI Atom Craft连接至游戏程序时,所有的声音回放将暂时停止。
停止音效将不会引起任何问题,因为它们是按照需求并被游戏播放的。然而,在音乐停止后,音乐并不会自动继续播放。
显然地,这与in-game preview的目的造成了冲突,因此SoundManager将重新播放音乐。
如需了解更多有关in-game preview功能的信息,请同样查看 " [CriAtom] In-game preview(在游戏中预览) (弹球demo) " 范例。
该范例支持in-game preview。只需打开CRI Atom Craft中的 " 数据:弹球 " 范例, 你就能与该范例一同使用in-game preview。