WiiリモコンやWiiFit、ヌンチャク、クラシックコントローラ等を使用できるようにするWiiRemotePluginを自作しましたが、プラグインの設定を利用した状態でのネットワークマルチプレイ時のみ、SlateCore.dllのSWidgetでクラッシュしてしまい、困っています。何度プレイしても発生する時もあれば、発生しない時もあり、再現性は悪いですが、かなりの頻度で起こります。 発生のタイミングもつかめていません。
原因がわからなかったので、VisualStudioから起動してみたところ、
SWidget::~SWidget()
{
if (FSlateApplicationBase::IsInitialized())
{
for (const auto& ActiveTimerHandle : ActiveTimers)
{
FSlateApplicationBase::Get().UnRegisterActiveTimer(ActiveTimerHandle);
}
}
} ←
の矢印の部分でブレークが発生しました。 ひととおり変数の値を確認してみましたが、ActiveTimers(型はTArray < TSharedRef < FActiveTimerHandle > > )の中のDataがNULLになっており、そこが怪しいのではと考えています。
プラグイン自体はgithubの方で公開しておりますので、参考にご覧ください。
[フォルダの説明]
Pluginsフォルダ ・・・ UE4上で使用するプラグインのデータです。
Toolフォルダ ・・・ Pluginで読み込むためのdllをビルドするプロジェクトが入っています。『WiiYourself!』というライブラリを少し改良して使用しています。
プラグインの使用方法については、
① WiiリモコンをBluetooth接続する。( 参考サイト:Dolphinで実機のWiiリモコン(周辺機器)を使う - GC+Wiiエミュレータ Wiki* )
・Wiiリモコンは接続が完了するまで、『1ボタン』や『2ボタン』などを定期的に押し続けて、常にLEDが点滅するようにしてください。
・BluetoothレシーバをUSBに接続し、"Bluetoothデバイスの追加"等を開き、『Nintendo RVL-CNT-○○』を選択してください。
・その後、『ペアリングにコードを使用しない』を選択すると、ドライバのインストールがかかり、インストールが完了すると接続完了になります。(『MyBluetooth』などのBluetoothレシーバ付属プログラムがある場合はそちらの流儀で接続してください。)
②WiiRemotePluginを既存のC++プロジェクトに追加する。
・Blueprintプロジェクトの場合は、VisualStudioプロジェクトを生成してください。
・既存プロジェクトのディレクトリ(.uprojectがあるディレクトリ)にPluginフォルダをそのままコピーしてください。
・エクスプローラー上で現在のディレクトリ(.uprojectがあるディレクトリ)から『Config』>『DefaultGame.ini』をテキストエディタ等で開き、
[Plugins]
EnabledPlugins=WiiRemotePlugin
と記述して保存をかけてください。
・プロジェクトを起動し、『編集』>『Plugins』>『Project』>『InputDevices』にあるWiiRemotePluginのEnableにチェックがついているか確認してください。ついていない場合は、チェックをつけてプロジェクトを再起動してください。これでPluginを使用できます。
③WiiRemotePluginを使用する。
・操作したいアクタのブループリントエディタを開き、『クラス設定』で詳細にあらわれた『インターフェース』の『追加』で『WiiRemoteInterface』を選択して継承を行ってください。
・続いてそのアクタのコンポーネントで『コンポーネントの追加』>『WiiRemote』を選択して追加してください。
・UnrealEditorに戻り、『編集』>『プロジェクトの設定』>『インプット』で『ActionMappings』か『AxisMappings』で入力イベントを作成してください。マッピング選択で一番下にもうひとつ『キーボード』の項目があり、そこに含まれているものがすべてWiiリモコンの入力になっています。あとは、通常の入力マッピング設定と入力イベントで操作入力を受け付けてUE4内で使用ができます。
ローカルプレイでは特にバグが見つかっていないので、使用したい方がいらっしゃいましたら『WiiYourself!』(http://wiiyourself.gl.tter.org/)
のライセンスについてご確認の上、自由にそのままご利用ください。また、初めてのプラグイン作成のため、プログラムに関するコーディングミス・バグの発見や構成に関するご意見がありましたらコメントを頂けると助かります。
その他にもインターフェースの継承やコンポーネントの追加の設定を飛ばして使用できる『WiiRemotePlayerController』や『WiiRemotePluginActor』などがありますが、まだ動作確認をしていないため、動作保証しかねます。
何の情報をお伝えすれば良いのかわからない状況ですので、問題解決に必要な情報がありましたらご連絡ください。
情報量が多く、大変難しい問題かもしれませんが、ご助力頂けると幸いです。