Wwise SDK 2024.1.2
|
Wwiseソース管理プラグインDLLを作成するには、次の手順を実行する必要があります:
![]() | 注釈: 1つのDLLに複数のプラグインを含むことができます。詳細は エクスポート関数の確立 をご覧ください。 |
新しいプロジェクトを開始するには、プロジェクトを作成し、このプロジェクトで使用されるエクスポート関数を設定する必要があります。
また、プロジェクトで使用するソース管理インターフェースに慣れる必要があります。
Visual Studioを使用してプロジェクトを作成するには、次の手順を実行します:
プロジェクトが作成され、Wwise Source Control SDK が使用するよう設定されました。次に、プラグインDLLを管理するために Wwise が使用する関数を作成します。
![]() | Tip: 厳密には、MFC DLL プロジェクトを作成する必要はありません。しかし、これの作成により、特定の文字列およびダイアログ操作が容易になります。MFC DLL を使用しない場合は、 SysAllocString 関数が使用できるよう、oleauto.h ヘッダを stdafx.h ファイルに含めるようにしてください。 |
各プラグインDLLは、3つの関数をエクスポートする必要があります:
これらのエクスポートされた関数のプロトタイプは次のタイプの定義内にあります:
以下は、プラグインを2つ含むプラグインDLLのエクスポート関数の例です:
![]() | 警告: プラグイン GUID 値を変更し、他のプラグインとの ID の競合を避ける必要があります。 |
Visual Studio でプロジェクトを作成する時、関数名をプロジェクトの .def ファイルに追加することによって、これらの関数をエクスポートする必要があります。モジュール定義ファイルが存在しない場合は、これを作成する必要があります。
モジュール定義ファイルを作成するには、次の手順に従います:
典型的なモジュール定義ファイルは次のようになります:
各 Wwise ソース管理プラグインは、適切に統合されるよう、特定のインターフェースが含んでいる必要があります。これについては、以下に要約されており、詳細については、このドキュメンテーションで後述されています。
プラグインは、ソース管理操作を行うためにこのインターフェースを実装する必要があります。
このインターフェースに関する詳細は、ソース管理プラグインインターフェースの構築 をご覧ください。
このインターフェースは、Wwise により実装され、その作成時にプラグインに与えられます。これは、プラグインにいくつかの有用なユーティリティ関数を公開します。
このインターフェースに関する詳細は、ソース管理ユーティリティインターフェースの使用 をご覧ください。
このインターフェースは、Wwise により実装され、ISourceControlUtilities クラスを介してプラグインに与えられます。これは、単純なプログレスダイアログを管理するための関数を公開します。
このインターフェースに関する詳細は、 ソース管理操作プログレスインターフェースの実装 をご覧ください。
このインターフェースは、Wwise UI ルック アンド フィールを持つダイアログを作成するためにプラグインが実装する必要のあるインターフェースです。
このインターフェースに関する詳細は、ソース管理プラグインダイアログの定義 をご覧ください。
AK::Wwise::ISourceControl のメソッドを実装する時、Wwise における様々な状況に応じてプラグインの動作を定義します。メソッドにより、プラグインは次の状況に対処することができます:
これらの状況の一部は、以下のセクションで説明されていますが、AK::Wwise::ISourceControl リファレンスを直接ご参照いただくと、実装する必要のあるインターフェースと関数についての完全な記述をご覧いただくことができます。
![]() | Tip: このインターフェースの多くのメソッドは、戻り値の型として AK::Wwise::ISourceControl::OperationResult 列挙体を持ちます。OperationResult_Failed リザルトは、操作がグローバルに失敗した時、つまり、プラグインによって戻されるデータが Wwise によって考慮されないようにする場合にのみ使用されなければならないことに注意してください。このようなエラーには次のようなものがあります:
|
このインターフェースの全てのメソッドを実装するには、AK::Wwise::ISourceControl から派生したクラスを作成する必要があります。このクラスは、プラグインの UI およびソース管理操作に関する全てを管理します。これらのメソッドが呼び出されるコンテキストは、コメント内で示されます。
![]() | 注意: Wwise とソース管理プラグインの間で交換される文字列パラメータとリザルトは Unicode である必要があります。 |
Wwise は、プラグインに関する情報を必要とする場合、DLL からエクスポートされる AkSourceControlGetPluginInfo 関数を呼び出します。(詳細は、エクスポート関数の確立 をご参照ください。)AK::Wwise::ISourceControl::PluginInfo クラスは、以下のデータより構成されています:
![]() | Tip: プラグイン情報を取得する簡単な方法は、AkSourceControlGetPluginInfo (エクスポート関数の確立) に、AK::Wwise::ISourceControl インターフェースの実装内に作成された静的メソッドを呼び出させることです。 この静的メソッドの簡単な実装は次のようになります: void SamplePlugin::GetPluginInfo( PluginInfo& out_rPluginInfo )
{
// Plug-in name and version
out_rPluginInfo.m_bstrName = ::SysAllocString( L"Sample Source Control Plug-in" );
out_rPluginInfo.m_uiVersion = 1;
// Function availability
out_rPluginInfo.m_bShowConfigDlgAvailable = false;
out_rPluginInfo.m_dwUpdateCommandID = AK::Wwise::SourceControlConstant::s_dwInvalidOperationID;// Replace with your ID
out_rPluginInfo.m_dwCommitCommandID = AK::Wwise::SourceControlConstant::s_dwInvalidOperationID;// Replace with your ID
out_rPluginInfo.m_bStatusIconAvailable = false;
}
|
![]() | 警告: プラグイン名とUpdate All 操作名は、Wwise がこのメモリの削除を担うため、SysAllocString 関数を使用して割り当てる必要があります。 |
プラグインインターフェースが作成されると、Wwise は AK::Wwise::ISourceControl::Init( ISourceControlUtilities* in_pUtilities ) メソッドを呼び出します。この関数のパラメータは、 Wwise の AK::Wwise::ISourceControlUtilities インターフェース実装へのポインタです。このポインタをプラグインクラスのメンバにコピーして、ダイアログを作成、プログレスダイアログを表示、メッセージボックスを表示、または、プラグイン構成をロードまたは保存したい場合があるかもしれません。このトピックに関する詳細は、ソース管理ユーティリティインターフェースの使用 をご参照ください。
AK::Wwise::ISourceControl::Init() の典型的な実装は次のとおりです:
プラグインインスタンスが破棄される前に、Wwise は AK::Wwise::ISourceControl::Term() メソッドを呼び出します。
AK::Wwise::ISourceControl::Term() の典型的な実装は次のとおりです:
プラグイン構成のレジストリへのロード/保存に関する詳細は、ソース管理プラグインサンプルコード をご参照ください。
これらの関数がいつ呼び出されるかに関する詳細は、プラグインインスタンスの破棄 をご参照ください。
Wwise は、ソース管理プラグインのインスタンスを作成する必要がある場合、DLL (エクスポート関数の確立) に AkSourceControlCreatePlugin() 関数を呼び出し、新しいインスタンスを作成します。 この関数は、ソース管理プラグインにインターフェース返します。プラグインのインスタンスが不要になると、Wwise は、この特定のインスタンス上に AK::Wwise::ISourceControl::Destroy() メソッドを呼び出します。このメソッドは、オブジェクトが消費するメモリやその他のリソースを解放し、続いてオブジェクト自体を削除します。
インスタンスが、New 演算子で作成された場合、AK::Wwise::ISourceControl::Destroy() の典型的な実装は次のようになります:
プラグインのインスタンスは、次のような場合に作成されます:
プラグインのインスタンスは、次のような場合に破棄されます:
このインターフェースは、プラグインインスタンスが初期化された場合にプラグインに与えられます ( プラグインインターフェースの初期化と終了 を参照)。 その関数は、プラグインの Wwise UI ルックアンドフィールでのダイアログ作成、メッセージボックス表示、プログレスダイアログ表示、構成のロードや保存を支援します。
このインターフェースは次のメソッドを公開します:
ソース管理操作を実行するとき、プログレスフィードバックメッセージにおけるプログレスダイアログ表示が有用です。これは、AK::Wwise::ISourceControlUtilities::GetProgressDialog() メソッドの呼び出しにより実行可能です。このメソッドは、AK::Wwise::ISourceControlOperationProgress インターフェースを返します。このインターフェースに関する詳細は、 ソース管理操作プログレスインターフェースの実装 をご覧ください。
Wwise UI ルックアンドフィールでメッセージボックスを表示する簡単な方法は、AK::Wwise::ISourceControlUtilities::MessageBox() メソッドを呼び出すことです。標準 MessageBox
Windows 関数呼び出しと同じように使用してください。プラグインに Wwise UI ルックアンドフィールを与えるためには、標準 MessageBox
呼び出しよりこちらのメソッドを使用してください。
Wwise UI ルックアンドフィールを持つダイアログを作成するには、AK::Wwise::ISourceControlUtilities::CreateModalCustomDialog( ISourceControlDialogBase* in_pDialog ) メソッドを呼び出す必要があります。このメソッドは、AK::Wwise::ISourceControlDialogBase インターフェースを入力として受け入れること以外は、CDialog::DoModal() メソッドと同じように機能します。詳細は、ソース管理プラグインダイアログの定義 をご参照ください。
AK::Wwise::ISourceControlUtilities は、レジストリにプラグイン構成を保存またはロードする簡単な方法を提供します。AK::Wwise::ISourceControlUtilities::GetRegistryPath() メソッドを呼び出すことにより、各プロジェクトやプラグインごとに異なるレジストリフォルダのパスを取得することができます。構成をロードまたは保存するには、プラグイン現行バージョンのサブフォルダを作成し、そこに全てのプラグインキーを作成する必要があります。AK::Wwise::ISourceControl::Init() メソッドにこの構成をロードし、これを AK::Wwise::ISourceControl::Term() メソッドに保存すると良いでしょう。
![]() | 警告: このパスにアクセスするには、HKEY_CURRENT_USERレジストリキーを使用する必要があります。プロジェクトのレジストリフォルダはこのキーを使用して作成され、ソース管理プラグイン構成はユーザー非依存である必要があるためです。 |
AK::Wwise::ISourceControlOperationProgress インターフェースの実装には、初期化時にプラグインに与えられる AK::Wwise::ISourceControlUtilities インターフェースを介してアクセスすることができます。 前者インターフェースは次のメソッドを公開します:
プログレスダイアログを作成して公開するには、AK::Wwise::ISourceControlOperationProgress::ShowProgress() 非ブロッキングメソッドを使用します。ログメッセージリストにメッセージを追加するには、AK::Wwise::ISourceControlOperationProgress::AddLogMessage() メソッドを使用します。
![]() | 警告: プログレスダイアログは、エスケープ文字(例: '\n' や '\t' 等)を考慮しません。テキストは、1行ずつ追加する必要があり、タブはブランク(スペース)に置き換える必要があります。 |
OK ボタンを有効化するには、AK::Wwise::ISourceControlOperationProgress::OperationCompleted() メソッドを呼び出します。このメソッドは、ユーザーが OK ボタンを押すまで戻りません。ユーザーが OK ボタンをを押すと、ダイアログが閉じられ破棄されます。
ユーザーがCancel ボタンを押したかどうかを知るには、AK::Wwise::ISourceControlOperationProgress::IsCanceled() メソッドを呼び出します。この操作は、AK::Wwise::ISourceControlOperationProgress::Cancel() メソッドの呼び出しによりキャンセルすることもできます。
![]() | 注釈: AK::Wwise::ISourceControlOperationProgress::Cancel() メソッドの呼び出しにより、ダイアログをプログラム的にキャンセルした場合でも、ダイアログを閉じて破棄するには、AK::Wwise::ISourceControlOperationProgress::OperationCompleted() を呼び出す必要があります。 |
Wwise ユーザーのワークフローにソース管理プラグインを統合するには、次のような特定の機能を実装する必要があります。
Wwise ユーザーは、Project Settings ダイアログで Config… ボタンをクリックすることによりプラグインを構成することができます。このボタンは、AK::Wwise::ISourceControl::PluginInfo::m_bShowConfigDlgAvailable が True に設定されている場合にのみ有効化されます。このボタンをクリックすると、Wwise はAK::Wwise::ISourceControl::ShowConfigDlg() メソッドを呼び出します。この関数の戻り値はブール値です。値の意味は以下のとおりです:
このメソッドの典型的な実装は次のとおりです:
このコードサンプルでは、DlgConfiguration クラスは AK::Wwise::ISourceControlDialogBase インターフェースの実装です。詳細は、ソース管理プラグインダイアログの定義 をご覧ください。
File Manager が更新されると、2つのメソッドが呼び出されます:
ファイルリストが移入されると、Wwise はディスク上にあるファイルを検索します。しかしながら、一部のソース管理システムでは、ファイルは削除された時点でディスクから削除されます。これにも関わらず、これらのファイルはサーバーにおける削除操作を確認するために識別される必要があります。この状態にあるファイルのリストを取得するために、Wwise は AK::Wwise::ISourceControl::GetMissingFilesInDirectories() メソッドを呼び出します。最初のパラメータは、Wwise がこのような欠損ファイルを探す際の検索先となるディレクトリのリストで、2番目のパラメータは、欠損ファイル名で上書きされる文字列のリストです。
![]() | 警告: プラグインには、指定されたディレクトリのサブディレクトリにあるファイルを含めないでください。 |
Wwise の完全なファイルリストを取得したら、Status および Owner(s) のカラムをリフレッシュする必要があります。 これを実行するために、Wwise は AK::Wwise::ISourceControl::GetFileStatus() メソッドを呼び出します。プラグインは、各ファイルに対応するステータスや所有者を公開する必要があります。Wwise は関数の最初のパラメータにリストされたファイルのステータスを取得します。2つ目のパラメータは、Status および Owner(s) のカラムに公開されるテキストを含む結果のマップです。
![]() | 警告: AK::Wwise::ISourceControl::FilenameToStatusMapItem の文字列メンバのメモリは Wwise によって削除されるので、このメモリは SysAllocString 関数を使用して割り当てられる必要があります。2つの文字列が同一メモリ空間を共有すると、Wwise はこれらの2つの文字列を別々に破棄しようとするため、これを避けてください。 |
Wwise がソース管理操作を含むコンテキストメニューを表示する際、特定のコンテキストで使用可能な全操作のリストを必要とします。このリストを取得するために、Wwise は AK::Wwise::ISourceControl::GetOperationList( OperationMenuType in_menuType, const StringList& in_rFilenameList, OperationList& out_rOperationList ) メソッドを呼び出します。最初のパラメータは、操作リストが表示されるコンテキストです。このコンテキストに応じて、一部のプラグインはユーザーを特定の操作に制限することができます。2つ目のパラメータは、ユーザーが選択したファイル名のリストです。これは、ファイルのステータスに応じて一部の操作を有効または無効にするために使用することができます。3つ目のパラメータは、現在のコンテキストで使用可能な操作のリストです。 この操作リストはプラグインによって埋められる必要があります。このリストに含まれている操作に関する情報は、コンテキストメニューを埋め、操作の ID でプラグインをコールバックするために使用されます。いずれの ID にも制限はありません。
Wwise は、LPCWSTR GetOperationName( DWORD in_dwOperationID ) 仮想メソッドを呼び出して、メニューやダイアログで表示する操作名を取得します。
![]() | 警告: Wwise は操作名の文字列が占有しているメモリを削除しません。従って、プラグインインスタンスと同時に作成および破棄される静的文字列の作成をお勧めします。 |
Wwise ユーザーがコンテキストメニューから操作を選択すると、Wwise はまずはじめに AK::Wwise::ISourceControl::GetOperationEffect( DWORD in_dwOperationID ) メソッドを呼び出します。 パラメータは、この操作に対応する操作IDです。このメソッドの実装は、AK::Wwise::ISourceControl::OperationEffect 列挙体の単数または複数の値からなるマスクを返します。Wwise は戻り値を使用して、ソース管理操作を続行する前にプロジェクトを保存するようユーザーに依頼する必要があるかどうかを確認します。更新、名前の変更、リバート、削除などの操作はローカルファイルの内容を変更します。コミット、チェックインのような操作は、サーバー上のファイルの内容を変更します。
![]() | 警告: ファイルに対する操作の影響に関する情報を返さないと、Wwise ユーザーのフラストレーションにつながる可能性があります。 ファイルがソース管理操作中にハードドライブ上で変更されると、Wwise はこの変更を検出し、ユーザーにプロジェクトをリロードするよう要求します。 ユーザーが保留中の変更を持ち(つまり、プロジェクトがダーティー)、リロードを要求された場合、この変更は失われます。ユーザーが、ダーティーであるファイルへの変更をリバートし、プロジェクトをリロードしないことを選択してから、変更を保存した場合、新たに更新されたファイルが上書きされる可能性があります。AK::Wwise::ISourceControl::GetOperationEffect は、返された情報を使用して、ユーザーに保存を強制することでこのような状況を避けます。 |
正常に最初のメソッドを呼び出した後、Wwise は AK::Wwise::ISourceControl::DoOperation( DWORD in_dwOperationID, const StringList& in_rFilenameList ) メソッドを呼び出します。最初のパラメータは、操作に対応する操作 IDです。2つ目のパラメータは、選択されたファイルのリストです。 このメソッドの実装は、AK::Wwise::ISourceControlOperationProgress インターフェースを使用して、プログレスダイアログを表示します。 詳細は ソース管理操作プログレスインターフェースの実装 をご覧ください。
Wwise は、次のような場合にアイコンをリフレッシュする必要があります:
AK::Wwise::ISourceControl::GetFileStatus() メソッドと同様のパターンを使用して、AK::Wwise::ISourceControl::GetFileStatusIcons( const StringList& in_rFilenameList, FilenameToIconMap& out_rFileIconsMap ) は、リスト内のファイルのアイコンおよびツールチップのテキストを含むマップを返す必要があります。最初のパラメータは、Wwise がアイコンマップを有する必要のあるファイル名のリストです。2つ目のパラメータは、以下のコンポーネントを含む結果のマップです:
![]() | 警告: AK::Wwise::ISourceControl::FilenameToIconMapItem の文字列メンバのメモリは Wwise によって削除されるので、このメモリは SysAllocString 関数を使用して割り当てられる必要があります。2つの文字列が同一メモリ空間を共有すると、Wwise はこれらの2つの文字列を別々に破棄しようとするため、これを避けてください。 |
マップに含まれているアイコンは任意のサイズにすることができますが、15x15 ピクセルのフォーマットにリサイズされます。 アイコンに関連する関数は、AK::Wwise::ISourceControl::PluginInfo::m_bStatusIconAvailable が Trueに設定されている場合のみ呼び出されます。
![]() | Tip: ご使用いただけるアイコンのセットは、この SDK にインストールされています。 |
Wwise ユーザーが以下を実行すると、ファイルの作成や変更が発生します:
これらのいずれかの状況が発生すると、Wwise は AK::Wwise::ISourceControl::PreCreateOrModify( const StringList& in_rFilenameList, CreateOrModifyOperation in_eOperation, bool& out_rContinue ) メソッドおよび AK::Wwise::ISourceControl::PostCreateOrModify( const StringList& in_rFilenameList, CreateOrModifyOperation in_eOperation, bool& out_rContinue ) メソッドを呼び出します。最初のパラメータは、作成または変更されるべきファイル名リストです。2つ目のパラメータは、実行される操作を定義するフラグです。リストされている任意のファイルに対していずれかの操作を実行することができるので、ビットごとの AND 演算子を使用して、2つ目のパラメータと事前定義されたフラグを比較する必要があります。例えば、一部のファイルが作成されたかどうかを知るには、次を実行してください:
AK::Wwise::ISourceControl::PreCreateOrModify() 関数および AK::Wwise::ISourceControl::PostCreateOrModify() 関数の3つ目のパラメータはプラグインにより設定され、Wwise に現行操作を続行するか停止するかを通知します。このパラメータは、主に AK::Wwise::ISourceControl::PreCreateOrModify() メソッドへの呼び出しによって使用されます。
![]() | Tip: これらの2つのメソッドを、ご使用のソース管理システムに固有の操作を実行するために使用することをお勧めします。例えば、AK::Wwise::ISourceControl::PreCreateOrModify() メソッドは、Perforce のチェックアウト操作を実行するために、また、AK::Wwise::ISourceControl::PostCreateOrModify() メソッドは、まだサーバー上にないファイルを追加するために使用することができます。最初のメソッドは、常にファイル作成または変更の前に呼び出され、2つ目のメソッドは、常にこのような操作の後に呼び出されます。この機能は、プラグインのセキュリティ層を実装するために使用可能です。 |
DLL にダイアログが含まれている場合、これらのダイアログが Wwise UI のルックアンドフィールを持つようにしてください。これを実行するには、以下の手順に従ってください:
標準的な Windows コントロールと Wwise に固有のコントロールを作成することができます。
静的コントロール、編集コントロール、チェックボックス、プッシュボタン、ラジオボタンなどの標準コントロールとグループコントロールを、Toolbox の Dialog Editor セクションにある対応ツールを使用して、Microsoft Development Environment Dialog Editor に直接追加することができます。これらのコントロールは、自動的に Wwise によってサブクラス化され、アプリケーションの別の場所にある同様のコントロールと同じ外観を持つようになります。
![]() | 注釈: ドロップボックス/コンボボックス コントロールは、自動的にサブクラス化されません。ダイアログにドロップダウンコントロールが必要な場合は、代わりに Combo カスタムを使用してください。詳細は、Wwise コントロールをご覧ください。 |
Wwise ダイアログコントロール(Captions や ComboBox など)をダイアログに統合するには、特別にコード化されたキャプションテキストを持つ静的テキストコントロール プレースホルダを使用します。このテキストは、次の形式を持っている必要があります:
ここで Classname は次のいずれかです:
![]() | Tip: ダイアログコントロールのレイアウト表示を簡単にするには、 Microsoft Development Environment Dialog Editor 内の静的プレースホルダのプロパティで Border を True に設定してください。 |
Wwise がダイアログを表示できるようにするには、AK::Wwise::ISourceControlDialogBase インターフェースを実装する必要があります。 このインターフェースは次のメソッドを公開します:
Wwise は、リソースを見つけることのできるコンテキストを認識している必要があります。ダイアログを作成する前に、Wwise は AK::Wwise::ISourceControlDialogBase::GetResourceHandle() メソッドを呼び出します。このメソッドの典型的な実装は次のとおりです:
Wwise は、ダイアログを作成するために、リソース内のダイアログのIDを必要とします。これを取得するために、Wwise は AK::Wwise::ISourceControlDialogBase::GetDialog() メソッドを呼び出します。このメソッドの典型的な実装は次のとおりです:
ダイアログのタイトルバーに、"?" が表示されるかどうかを知るために、Wwise は AK::Wwise::ISourceControlDialogBase::HasHelp() を呼び出します。 ダイアログに関連する Help セクションがある場合、プラグインは True を返す必要があります。この場合、"?" アイコンが表示されます。
Wwise ユーザーがダイアログの "?" ボタンをクリックすると、Wwise は AK::Wwise::ISourceControlDialogBase::Help() メソッドを呼び出します。プラグインは、Help リクエストを処理する場合には True を返し、何も行わない場合には False を返す必要があります。このメソッドの実装例は、次のとおりです:
![]() | 注意: Help() メソッドは、AfxGetApp()->HtmlHelp() を呼び出すべきではありません。Helpウィンドウを誤った親ウィンドウで起動してしまい、フローティングビューが予期しない動作を起こすためです。 代わりに、上の例で示されているように、 HtmlHelp() を NULL ウィンドウハンドルで使用するようにしてください。 |
ダイアログは、Windows メッセージを管理するためにMFC メソッドを使用することができません。代わりに、ダイアログが Windows メッセージを受け取るたびに、AK::Wwise::ISourceControlDialogBase::WindowProc() が呼び出されます。このメソッドの実装例は次のとおりです:
このメソッドの戻り値の意味は、次のとおりです:
ダイアログを手動で閉じるには、Windows の PostMessage() 関数を使用する必要があります。この関数への典型的な呼び出しは、次のようになります:
ダイアログを表示するには、対応する AK::Wwise::ISourceControlDialogBase 実装のインスタンスを作成する必要があります。AK::Wwise::ISourceControlUtilities::CreateModalCustomDialog() メソッドを使用して、ダイアログはモーダルダイアログのように表示されます。以下は、ダイアログ作成および表示方法を示す例です: