第 4 课

目录

创建 Wwise 专有 Event 属性

首先,我们来通过 Unity 创建脚本,并设置 Wwise 专有 Event 类变量。利用变量,我们可以在脚本中存储相关信息,进而暴露在 Inspector 中,以便通过 Unity Editor 轻松地设置变量值。为此,我们将创建新的脚本并对其内容进行修改(添加一行代码)。假如这是您第一次使用代码编辑器,也请不要担心;我们会对代码和代码编辑器进行详细的说明。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 4,然后选择 Posting Events using Wwise-Types

  2. 在 Hierarchy 中,选中 Player 游戏对象。

    这次我们将选择创建自定义脚本,而不是像之前一样添加预制组件。

  3. 在 Inspector 中,单击 Add Component,然后转到 New Script

    在选中 New Script 选项之后,我们可以根据需要来命名脚本。不过要注意检查并更正语法错误,不然稍后重命名脚本可能会比较麻烦。接下来我们将会重复使用此脚本,所以最好仔细对照认证课程中的代码段。另外,我们将使用 C # 语言来编写脚本,所以请不要更改 Language 属性。

  4. 键入 PostWwiseEvent,然后单击 Create and Add

    在 Inspector 中,我们会看到刚才创建的 PostWwiseEvent 组件。此脚本会自动存储到工程中。您可以在 Project 窗口中或通过双击来进行访问。

    [备注]

    Unity 可能会需要一些时间来将脚本完全集成到工程中。请务必等到复选框旁边显示新建脚本的名称,再执行下一步来打开脚本。

  5. 在 Script 属性中,双击 PostWwiseEvent 区域。

    作为 Unity 安装程序的一部分,Visual Studio(在 Mac 上为 MonoDevelop)代码编辑器将会在新的窗口中打开并显示脚本内容。Visual Studio 和 MonoDevelop 看起来跟普通文本编辑器很像,而且便于以文本形式来实施修改。只不过它们专门用来编辑代码,如 Unity 脚本中的代码。这些代码编辑器会对代码行进行编号以便在需要时引用,并按照代码类别(比如类、函数、属性)以不同的颜色高亮显示带有语法的文本。另外,还会提示可能要用的函数或属性名称,从而在编写代码时为您提供帮助。同时,在包含错误的代码下面显示红线。

    [备注]

    Visual Studio(在 Mac 上为 MonoDevelop)已经包含在 Unity 安装程序中。假如没有打开代码编辑器或要改用自己常用的代码编辑器,请在 Unity 菜单栏中依次转到 Edit > Preferences > External Tools。如果因为某种原因而没能成功安装代码编辑器,请参阅“简介”中的“安装 Unity”章节。

    接下来,我们看下脚本的默认显示样式。我们注意到,脚本并不是空的,里面已经写入了一些代码。

    上图展示了代码编辑器中脚本的显示样式。不过,在本项认证课程中,我们一般会按照如下样式来呈现脚本。

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

    [备注]

    为了方便起见,本项认证课程中展示的所有脚本内容都可复制并粘贴到您自己创建的脚本中。假如您因为不小心删除脚本、跳过练习步骤或遇到其他问题而无法运行脚本,不妨直接删除代码编辑器中的所有文本,然后将“引用脚本”章节提供的相关脚本文本复制并粘贴到代码编辑器中。

    接下来,我们仔细看看此脚本的各个部分。

    • 命名空间在脚本最上面,我们会看到有几行代码的前面使用了 using 字眼。此关键词表示该项为命名空间。命名空间是为了便于用户编写脚本而设置的一组类。

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;

    • 在命名空间的下面,我们会看到一个设为 MonoBehaviour 的类。该类包含所要使用的所有变量、属性和函数。该类中声明的全部内容都要放在左大括号 { 和右大括号 } 之间,以便类确定哪部分脚本属于它。

      public class PostWwiseEvent : MonoBehaviour {
          // 使用此函数进行初始化。
          void Start () {
          
          }
          
          // 每帧调用 Update 函数一次。
          void Update () {
          
          }
      }

      在场景中添加脚本后,即可使用您在脚本名称类中声明的内容。到时,所有可见变量都会显示在脚本名称的下面。

    • 函数在类中,我们会看到两个函数:Start() 和 Update()。这些封装代码段将由 Unity 或其他脚本调用。在运行场景时,会调用 Start()。在调用 Start() 后,游戏每运行一帧会调用 Update() 一次。

      在函数的前面,我们会看到返回类型。不过,在本项认证课程中,我们将全部使用 void 返回类型,即不返回任何数据。

          // 使用此函数进行初始化。
          void Start () {
      
          }
          // 每帧调用 Update 函数一次。
          void Update () {
          
          }

      在每个函数的上面,我们会看到一行以双斜线 // 为开头的文本。该文本称为单行注释,由开发人员用于添加有关属性、函数等元素的备注和说明;Unity 将忽略 // 符号右边的所有文本。

    [备注]

    我们注意到,左大括号 { 与类或函数名称位于同一行。这只是本项认证课程为了缩短脚本代码段的长度而使用的代码编写样式,不过这并不会对脚本产生影响。

    为了把要用的属性暴露在 Inspector 中,我们需要将该属性添加到 PostWwiseEvent 类。也就是说,在代码中属性既要在类的左大括号和右大括号之内,又要在 Start() 和 Update() 函数之外。

    [备注]

    除了本项认证课程,您也可以参照 Unity 的脚本编写入门指南 – Learning C# in unity for beginners

    那么,到底要将什么属性添加到脚本中呢?在此,我们需要创建一个包含 Event(事件)相关信息的属性。属性分三个部分予以声明:访问修饰符、属性类型和属性名称。

    访问修饰符用于描述属性在脚本之外是否可见。因为我们需要 Unity 获知属性并将其添加到 Inspector 中,所以访问修饰符必须为 public。

    [备注]

    假如您使用的是 Visual Studio,应该会很快发现编辑器会在文本下方显示下拉菜单,以此提示要写入哪些内容。这种功能称为 IntelliSense。此功能可能只在部分代码编辑器才可使用。为此,您有可能需要手动写入文本,而无法利用下拉菜单来创建脚本。

  6. PostWwiseEvent : MonoBehaviour 类之内、函数之外,选择一个空白行,然后键入 public

    [备注]

    在本项认证课程中,我们会将脚本中要应用的更改高亮显示为橙色字体(如下所示)。

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

    在此,我们需要将属性设为 Wwise 专有 Event 类。您可以通过键入 AK.Wwise. 来检索所有 Wwise 专有类,并在其之后插入类的类型(如 Event、RTPC、State)。为此,我们来将 Wwise 专有 Event 类声明为 AK.Wwise.Event。

  7. public 之后添加一个空格,然后键入 AK.Wwise.Event

    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event 
        // 使用此函数进行初始化。
        public void Start () {
        
        }

    现在,我们声明了属性的类型。不过,为了便于识别,还需提供一个要显示在 Inspector 中的属性名称。

    [备注]

    属性的名称并不一定要跟 Wwise 工程所要选择的具体 Event 相关。它其实只是 Property Drawer 的标签,目的是便于声音设计师了解所要创建的 Wwise 对象类型。比如,您可能想要给 Wwise Event 取个能够表明其用途的名称(如 Enemy_Explosion),然后在游戏中会按照声音的播放时机来进行命名(如 EnemyDeath)以便关卡设计师了解何时调用声音。

  8. Ak.Wwise.Event 之后添加一个空格,然后键入 MyEvent

    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event MyEvent

    最后还有一点很重要,这种编程语言 (C#) 需要获知代码行何时结束,所以我们要添加分号 ; 来加以声明。代码编辑器需要通过行尾来结束一行代码,以便另起一行继续编写代码。也就是说,假如没有这些分号,代码编辑器可能会无法检测错误出在哪里,甚至有时会显示不正确的帮助消息。因此,假如您收到奇怪的帮助消息或者代码下方显示红线,很可能是因为脚本中某个地方需要添加分号或大括号。

  9. AK.Wwise.Event MyEvent 之后,添加一个分号 ;

    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event MyEvent;

    现在,我们创建了第一项属性 – 一个名为 MyEvent 的 public 类型的 Event 属性。不过,除非保存脚本,否则 Unity 还是无法获知所执行的更改。

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

[技巧]

在代码编辑器中保存脚本后返回 Unity 时,Unity 需要加载之前执行的更改,所以有可能会在短时间内无响应。

在加载完成后,我们会在 Unity Inspector 中的 PostWwiseEvent 脚本下看到 Property Drawer。

因为使用了 Wwise 专有 Event 类,所以我们会自动获得一个按钮。通过该按钮,可选择 Wwise 工程中包含的任何 Wwise Event。不过,目前的代码还不完整;它虽然知道可以使用 Wwise 专有 Event,但却不知拿它来做什么。

在下节课程中,我们将为脚本添加功能以使其能够将 Event 发送到游戏对象上,然后再从 Inspector 中选择特定的 Event。