menu
目录
Switch(切换开关)的作用域为某个特定游戏对象,State(状态)的作用域为全局域,而 Game Parameter(游戏参数)则在两种情形下都适用。正如前面“利用 Wwise 专有属性设置 Game Parameter”章节所述,在声明 Game Parameter 属性之后,我们可以自由选用 SetValue() 或 SetGlobalValue() 函数。为了便于演示,我们来看下如何针对各个 Evil Head(大头怪)将 Enemy_EvilHead_MovementSpeed Game Parameter 的作用域设在特定游戏对象上。
-
在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 5,然后选择 Understanding Global and Game Object Scope。
在此场景中,冒险家将会被三个 Evil Head 包围。在其中一个 Evil Head 试图攻击 Player 时,它会执行一系列动作。首先,它会将视线转向冒险家,流露出将要发起攻击的意图。然后,它会冲向冒险家,并在与其遭遇时猛咬一口。每个动作都配有相应的提示声音,这样玩家不用看就知道它们就在附近。除此之外,还会循环播放 Hover(盘旋)声音,以此不断告知听者 Evil Head 相对于 Main Camera 的位置。作为某种隐秘的音频提示,我们为 EvilHead_Hover_LP Sound SFX(音效)应用了 Wwise Tremolo Effect(效果器),并使用 RTPC 单独地将频率映射到了各个 Evil Head 的速度。这样是为了让 Player 能够及时获知 Evil Head 的当前行为。无论要跟多少 Evil Head 战斗,只需一个 Game Parameter 就够了。接下来,我们试玩游戏并连接 Wwise 来使用 Game Object Profiler 进行监控,以便更好地理解如何针对特定游戏对象来使用 Game Parameter。
-
在 Wwise 菜单栏中,转到 Layouts(布局),然后选择 Game Object Profiler(游戏对象性能分析器)。
在连接之前,我们需要将监视对象限定在 Evil Head 和 Enemy_EvilHead_MovementSpeed 上。Game Object Profiler 布局的 Game Sync Monitor 中会显示所有游戏对象,不过我们可以使用 Object Filter 来选择所要监控的特定对象。
-
在 Game Sync Monitor(游戏同步器监控器)中,单击 Browse For Object(浏览对象)按钮 [...]。
-
选中 Enemy_EvilHead_MovementSpeed Game Parameter,然后单击 OK(确定)。
现在我们可以使用 Enemy_EvilHead_MovementSpeed Game Parameter 监视《Wwise Adventure Game》中的各个对象了。接下来,我们连接游戏。因为只是为了测试一下,所以最好避免玩家被攻击致死。
-
单击 Play 按钮进入场景,然后按下 ESC 打开《WAG》游戏菜单,并选中 GOD MODE(上帝模式)。
-
在 Wwise 工具栏中,单击 Remote...(远程...),然后选中 Wwise Adventure Game (Editor),并单击 Connect(连接)。
-
至少避开 Evil Head 五到十次攻击,不过不妨时不时砍它们几下。
-
退出 Play 模式,然后切换回 Wwise。
![]() | |
注意不要跑向 Village!村庄受魔法保护,EvilHead 一靠近就会死。 |
在 Wwise 中,Game Object Profiler 会在一张图上叠加显示所有 EvilHead。

每次 Evil Head 发起冲锋都会显示一条代表加速移动的陡升攻击曲线。在 Evil Head 停止冲锋时,曲线会慢慢下降,直到 Evil Head 再次准备发起攻击。曲线中骤然上升的部分表示 Evil Head 因受到武器攻击而被打断。您可能注意到了,各个 Game Object 的 Game Parameter 曲线并不是完全一样的。这是因为它们分别代表了不同 Evil Head 的行为。从下面的 SetMovementSpeed() 函数可以看出,Enemy_EvilHead_MovementSpeed Game Parameter 使用的是 SetValue() 函数。
private void SetMovementSpeed(float speed) { MovementRTPC.SetValue(gameObject, speed); }
在上面的函数中,我们将 gameObject 和 speed 变量发送给了 SetValue() 函数。其中,speed 变量负责设置 Game Parameter,gameObject 游戏对象负责发送 Enemy_EvilHead_Hover Event。
![]() | |
在同时针对全局和游戏对象使用 Game Parameter 时,基于游戏对象的函数 SetValue() 会始终覆盖基于特定游戏对象的全局函数 SetGlobalValue()。就拿基于全局作用域的 Time_of_Day Game Parameter 来说。假如另一脚本要针对同一游戏对象(如 Woodlands Ambience)使用 SetValue() 函数,SetValue() 会直接接管,而 Woodlands Ambience 将只会受游戏对象定义的 Game Parameter 值影响。如此一来,无论再对基于全局作用域的 Time_of_Day Game Parameter 执行任何更改,都不会影响到 Woodlands Ambience。 |