第 5 课

目录

利用 Wwise 专有属性设置 Game Parameter

在需要连续控制逐渐变化的效果器属性、虚声部设置或音量电平时,一般都会借助 Game Parameter(游戏参数)来实现。Game Parameter 便于控制声音随时间的交替变化。就拿《Wwise Adventure Game》中的太阳来说。阳光受 TimeOfDay 属性控制。就跟太阳落下时 Allegro 王国逐渐变暗一样,环境声也要慢慢切换到夜晚状态。

环境声的这种逐渐变化是通过 Blend Container(混合容器)来设置的。在此,Time_of_Day Game Parameter 的值会控制是播放 Day(白天)还是 Night(夜晚)环境声。

接下来,我们将学习如何通过《WAG》的 TimeOfDay 属性来驱动 Time_of_Day Game Parameter。同时,使用 Game Object Profiler 来确认其是否能够正常工作。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 5,然后选择 Setting Game Parameters with Wwise-Types

  2. 在 Hierarchy 中,展开 Wwise 游戏对象,然后选中 Sun 游戏对象。

  3. 在 Inspector 中,创建新的脚本并将其命名为 SetTimeOfDayRTPC

    [备注]

    假如您不知道如何创建脚本,请参阅第 4 课的“创建 Wwise 专有 Event 属性”

  4. 双击 SetTimeOfDayRTPC,以便在代码编辑器中打开脚本。

    我们的目的是创建脚本以在游戏的每一帧获取游戏中的时辰并设置相应的 RTPC。在《WAG》中,此 RTPC 已存在于 Time_of_Day 之下。我们可以使用 Wwise 专有属性 AK.Wwise.RTPC 来更新该 RTPC。接下来,我们定义类并使用 public 访问修饰符来使其在 Inspector 中可见。

  5. SetTimeOfDayRTPC 类之内,键入 public AK.Wwise.RTPC

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
        
    public class SetTimeOfDayRTPC : MonoBehaviour {
        public AK.Wwise.RTPC
        // 使用此函数进行初始化。
        void Start () {
        
        }
        
        // 每帧调用 Update 函数一次。
        void Update () {
                
        }
    }

  6. 将变量命名为 TimeOfDayRTPC,并在结尾添加一个分号 ;。

    publicclass SetTimeOfDayRTPC : MonoBehaviour {
    public AK.Wwise.RTPC TimeOfDayRTPC;
    
  7. 按下 CTRL+S(在 Windows 上)或 CMD+S(在 Mac 上),以便保存脚本。

    现在,我们会在 Inspector 中看到可指派的 Wwise 专有 RTPC Property Drawer。不过,除了允许选择 RTPC,目前还未在脚本中指定要拿它来做什么。因为需要不断更新属性以及游戏中的时辰,所以我们要从相应的函数来调用属性以便在游戏的每一帧加以更新。该函数名为 Update(),它会运行大括号之内的所有代码。

  8. Update() 函数之内,键入 TimeOfDayRTPC.set

    // 每帧调用 Update 函数一次。
    void Update () {
        TimeOfDayRTPC.set
    }

    在句点 . 之后开始键入内容时,Visual Studio 会查找跟键入内容相像的可用函数。在此,我们会看到两个选项:SetGlobalValue 和 SetValue。假如没有显示相应的菜单,请尝试删除 TimeOfDayRTPC 之后的所有内容,然后重新键入句点 .。

    倘若使用 SetValue() 函数,将只针对当前游戏对象设置 RTPC。不过,因为各种区域环境声绑定在很多不同的游戏对象上,所以我们要使用 SetGlobalValue,以此借助同一 Game Parameter 来影响游戏中的所有游戏对象。

  9. TimeOfDayRTPC 之后,单击 SetGlobalValue 选项或键入 SetGlobalValue()

    // 每帧调用 Update 函数一次。
    void Update () {
        TimeOfDayRTPC.SetGlobalValue()
    }

    接下来,我们要将数值发送给 RTPC Game Parameter。在《Wwise Adventure Game》中,TimeOfDay 是在 DayNightCycle 脚本中更新的。此脚本会将该值不断地发送给 GameManager,以此在游戏当中记录各种全局游戏变量。因此,在设置 TimeOfDayRTPC 时,我们可以直接通过 GameManager 来检索该值,并使用 .SetGlobalValue() 函数将其发送给 Wwise。

  10. SetGlobalValue 的圆括号之内,键入 GameManager.TimeOfDay,并在圆括号之后添加一个分号 ;。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
        
    public class SetTimeOfDayRTPC : MonoBehaviour {
        public AK.Wwise.RTPC TimeOfDayRTPC;
        // 使用此函数进行初始化。
        void Start () {
          
        }
        
        // 每帧调用 Update 函数一次。
        void Update () {
            TimeOfDayRTPC.SetGlobalValue(GameManager.TimeOfDay);
        }
    }

    现在我们完成了所有脚本编写步骤,接下来可以保存脚本了。

  11. 按下 CTRL+S(在 Windows 上)或 CMD+S(在 Mac 上),以便保存脚本。

    最后,我们要将 Time_of_Day Game Parameter 指派给 Wwise 专有 RTPC 变量,以便脚本知道要设置哪个 Game Parameter。

  12. 在 Unity 中,单击 TimeOfDayRTPC Property Drawer,然后展开 Ambient 并双击 Time_Of_Day

    接下来,我们将使用 Game Object Profiler 来测试是否能够正常更新 Game Parameter。通过选择 Time_Of_Day Game Parameter,我们可以监控数值随时间的变化。

  13. 在 Wwise 菜单栏中,转到 Layouts(布局),然后选择 Game Object Profiler(游戏对象性能分析器)。

    利用 Game Object Profiler,我们可以监控注册的游戏对象。每次利用组件或通过脚本发送 Event(事件)时都会注册游戏对象。不过,因为我们为数值设置了全局作用域,所以会将 RTPC 值应用于指派给同一 RTPC 的所有游戏对象。因此,在 Game Object Profiler 中查看 Game Parameter 曲线时并不需要指定具体的游戏对象。

    [技巧]

    在后面的“了解 Global Scope 和 Game Object Scope”章节中,我们会进一步说明 Global Scope(全局作用域)和 Game Object Scope(游戏对象作用域)之间的区别。

  14. 在 Game Object Explorer(游戏对象资源管理器)中,选中 Watches(监视)选项卡。

  15. 单击选择器按钮 [>>],然后选择 Global Game Object(全局游戏对象)。

    接下来,我们要在 Game Sync Monitor 中选择所要监控的 Game Parameter。

  16. 在 Game Sync Monitor(游戏同步器监控器)中,单击 Add(添加)。

  17. 展开 Ambient Work Unit(工作单元),然后选中 Time_of_Day Game Parameter 并单击 OK(确定)。

    现在,我们可以连接游戏并进去试玩。在此过程中,Game Sync Monitor 将会捕获 Game Parameter。

  18. 单击 Remote...(远程...)。

  19. 在 Remote Connections(远程连接)视图中,选中 Wwise Adventure Game (Editor),然后单击 Connect(连接)。

  20. 在 Unity 中,单击 Play

  21. 切换到 Wwise 并察看 Game Sync Monitor。

    现在,我们会在 Game Sync Monitor 中看到平稳上升的曲线。这是因为脚本使用来自 GameManager 的 TimeOfDay 参数更新了 RTPC。要想看到更加快速的变化,您可以在《WAG》游戏菜单中调节 Time of Day(时辰)滑杆,以此更新 GameManager 中的 TimeOfDay 变量。接下来,我们先退出 Play 模式。

  22. 按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮,以便退出 Play 模式。