版本

menu_open
Wwise SDK 2019.2.15
如何为插件创建 Resource 文件

Resource 文件(以 .rc 作为扩展名)用于描述插件在创建自定义图形界面时所用的资源。 我们可以使用 Visual Studio Editor 工具来便捷地管理 Resource 文件。藉此,可通过将各种小组件拖到模板上来构建 GUI。下面介绍了如何逐步为新的插件创建 Resource 文件。

首先,使用 wp.py 创建新的插件(若对开发工具不熟悉,请参阅 使用开发工具 章节)。

python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" new

对提示作出回应,并在创建插件后将目录改为工程文件夹,然后调用 premake

cd MyNewFX
python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" premake Authoring

在 Visual Studio 2019 中打开生成的解决方案文件 (.sln),确保高亮显示工程文件夹(不要与解决方案文件夹混淆,否则 Add New Item 选项会不同),然后在 Project 菜单中选择 Add New Item...。在对话框窗口中,在左侧列中选择 Resource ,并在中间窗格中选择 Resource File (.rc)。藉此,可在工程的 WwisePlugin 文件夹中创建名为 Resource.rc 的文件。

在 Resource View 中,右键单击 Resource.rc 文件,并选择 Add Resource。在 Add Resource 窗口中,选择 Dialog 并单击 New 按钮。

备注: 在创建 DIALOG 窗口时,确保在其 Properties 中设置以下样式:
  • Appearance/Border = None
  • Appearance/Clip Children = True
  • Appearance/Style = Child
  • Misc/Control = True
  • Misc/Control Parent = True

这样应当就可以利用界面左侧的 Toolbox 选项卡将小组件拖放到模板上来构建插件的图形界面了。在保存工程时,将更新 Resource 文件。

若要将 Resource.rc 文件包含在工程中,只需再次调用 premake 即可。这样的话,在下次构建插件时,便会基于 Resource 文件自动生成名为 resource.h 的文件:

python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" build -c Release -x x64_vc160 Authoring

若要告知插件使用自定义界面,则需覆盖 AK::Wwise::IAudioPlugin 所提供的方法。 在 PluginNamePlugin.h 中包含 resource.h,然后添加方法签名并创建 private 变量来存储窗口句柄。

#pragma once
#include "MyNewFXPlugin.h"
#include "resource.h"
class MyNewFXPlugin final
{
public:
    MyNewFXPluginGUI();
    ~MyNewFXPluginGUI();
    HINSTANCE GetResourceHandle() const override;
    bool GetDialog(
        eDialog in_eDialog,
UINT& out_uiDialogID,
AK::Wwise::PopulateTableItem *& out_pTable
    ) const override;
 
    bool WindowProc(
        eDialog in_eDialog,
HWND in_hWnd,
UINT in_message,
WPARAM in_wParam,
LPARAM in_lParam,
LRESULT & out_lResult
    ) override;
private:
    HWND m_hwndPropView = nullptr;
};

PluginNamePlugin.cpp 中,添加对这些方法的实现代码:

#include <afxwin.h>
HINSTANCE MyNewFXPlugin::GetResourceHandle() const
{
    AFX_MANAGE_STATE( AfxGetStaticModuleState() );
    return AfxGetStaticModuleState()->m_hCurrentResourceHandle;
}
bool MyNewFXPluginGUI::GetDialog( AK::Wwise::Plugin::eDialog in_eDialog, UINT & out_uiDialogID, AK::Wwise::Plugin::PopulateTableItem *& out_pTable ) const
{
AKASSERT( in_eDialog == SettingsDialog );
out_uiDialogID = IDD_DIALOG1;
out_pTable = nullptr;
return true;
}
bool MyNewFXPluginGUI::WindowProc( AK::Wwise::Plugin::eDialog in_eDialog, HWND in_hWnd, UINT in_message, WPARAM in_wParam, LPARAM in_lParam, LRESULT & out_lResult )
{
switch ( in_message )
{
case WM_INITDIALOG:
m_hwndPropView = in_hWnd;
break;
case WM_DESTROY:
m_hwndPropView = NULL;
break;
}
out_lResult = 0;
return false;
}

最后,将资源文件添加到 PremkaePlugin.lua

Plugin.authoring.files =
{
...
"resource.h",
"Resource.rc"
}

重新编译插件并将其加载到 Wwise 工程中。这样应当就可以看到自定义图形界面了。

Audiokinetic namespace
#define NULL
Definition: AkTypes.h:49
Use this base class to quickly implement most plugin functions empty
Definition: AudioPlugin.h:627
#define AKASSERT(Condition)
Definition: AkAssert.h:76

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅