複数デバイス使用時のLiveLinkトラブル:原因と回避策
技術ブログ再始動:自分を楽しむ喜び
久々の技術ブログです。
技術ブログをあまり書かない理由は、ここ数年、業務向けのデバイス接続などが多く、「誰が読むんだろうか…」と思い、ここ2年ほど、個人のメモ(Obsidian)に書き溜めていたためです。
しかし、気づいたんです。
LTとかもそうですが、誰かのためにやるのではなく、
自分が言いたい、書きたい、楽しいことを伝えればいい。
それでどう感じるかは相手次第なんですよね。
お客様が、楽しむか楽しむまいか、そんなのはどっちでもいいよ。まずは自分自身が楽しむこと。自分が楽しまなきゃ、周りを楽しませることもできないからね。
(新日本プロレス 内藤哲也)
あと、皆さんには同じ悩みで時間を使ってほしくないのでね。
( 家族や自己研鑽、趣味好きなことに時間を使ってほしい)
このおじさんのブログが参考になれば幸いです。
さて、前置きが長くなりました。次から本題です。
Unreal Engine LiveLinkでの「Apply to Client」使用時の課題と解決策
Unreal EngineでLiveLinkを使用する際、「Apply to Client」機能は現地での設定を迅速に適用できる便利な機能です。
しかし、複数のLiveLinkデバイスを使う場合、「Apply to Client」の初期設計に起因する問題が発生しました。
1. 実例:モーションキャプチャーカメラとグローブ型デバイスの使用時
私は、モーションキャプチャー用のカメラと、グローブ型デバイスを同時に利用しようとした際に、この問題に直面しました。
問題の発生
グローブ型デバイスを接続後、モーションキャプチャー機材の設定を「Apply to Client」で適用すると、グローブ型デバイスのLiveLinkアニメーションが無効化されます。
逆に、グローブ型デバイスでアニメーションを受信中に「Apply to Client」を実行すると、「Nullアクセス」やエディターのクラッシュが発生しました。
検証
開発中のトラブルシューティングには、LiveLink.ShowDebugInfo コマンドが有効でした。このコマンドを使用すると、接続されているソースやデータの状況を確認できます。どうやら、Apply to Client を実行した際に、アニメーションが無効化されるタイミングで、既存のグローブ型デバイスのLiveLinkが消失していました。
2. 問題の原因:「Apply to Client」の初期設計
「Apply to Client」を実行すると、Unreal Engineが自動的にRemoveAllSourcesを呼び出します。これは、すべての既存LiveLinkソースを消去するものです。この動作は、新しいソースを適用する際に有用ですが、複数デバイスを接続する場合に問題を引き起こしていました。
3. 解決策:拡張関数の実装
この問題に対応するため、RemoveAllSources を除外した独自のプラグインを作成しました。この関数は既存ソースを保ちながら、新しいソースを「追加」するように動作を変更しています。
RemoveAllSourcesをしないApplytoClientを作ったら
— TARK🥷 (@LideTark) 2024年12月14日
競合...いや上書きを避けれて複数のLiveLinkを動かせるようになった。これでいいのだろうか... pic.twitter.com/U36BB7yjxL
ちなみに、私はC++が一切わからないので、ChatGPTと深く会話をしながらトライアンドエラーで作成しました。
気が向いたら、この自作プラグインを後日公開します。
ぜひ、いろいろ突っ込んでいただければ幸いです(笑)
5. まとめ
- 問題: 「Apply to Client」による
RemoveAllSourcesの自動実行で、先行して動いているLiveLinkデバイスが無効化される問題が発生。 - 解決策:
RemoveAllSourcesを除外した拡張関数を使用し、デバイスを追加する方式に変更。 - 教訓: LiveLinkの設計において、複数デバイスの互換性を考慮することが重要。
Unreal EngineでLiveLinkを利用する際の参考として、この経験が役に立てば幸いです。
CollabViewerを快適なVRマルチプレイで楽しもう。Quest2編
本記事はUnreal Engine (UE) その1 Advent Calendar 2022 6日目の記事です。
- はじめに
- 快適なプレイへの道
- 起動しても画面が真っ暗でログインメニューが表示されない
- めっちゃカクカクする
- FFRDynamicを有効
- お詫び
UnrealVRSpectatorUtilitiesPluginのビルドエラーについて
訂正
2020年12月アドカレで【VRSpectatorScreenにUMGを表示する方法】を投稿しました。
そして、こう記載しました。
C++分からなくても実装できる...と。
戒めの魚拓(心のジョルノがすまん、ありゃ嘘だと言っている)

-------------戒め終了--------------
記事を読んでいただいた方から、パッケージエラーが出る質問を受けて、
Blueprintオンリーのプロジェクトの場合、事前準備とプラグインソースコードを変更する必要があったので補足説明いたします。
初めに
※ソースコードの知識がないので、処理が効率的ではない、誤っている点があると思いますがその際は、コメントをいただければ幸いです。
目標
4.26のVRテンプレートに”UnrealVRSpectatorUtilitiesPlugin”を入れて下記機能を実現し、パッケージ化する。
レベルBlueprintの実装

Play画像(マウスの座標を表示しています)

今回、パッケージ化を達成するためには2つの処理を行う必要がありました。
順番にやってみましょう。
1.プロジェクトにC++クラスを追加
C++のプラグインを利用するには、プロジェクト自体にc++クラスを用意しておく必要があります。
Noneを選択してMyClassを作成

2.includeエラーの対処
当方環境にて、ビルド時にHeadMountedDisplayでIncludeエラーが発生するので、事前に対処します。
VRSpectatorUtilities.Build.csを開き、茶範囲のPublicIncludepath~の下に
青範囲に下記コードを追加
PrivateDependencyModuleNames.AddRange(new string[] {"HeadMountedDisplay"});

注意:リンク先のコードをコピペするとString[のあとに"]"が抜けているので気を付けてください
あとは、レベルブループリントを組んでパッケージ化を実行すれば完了です。
補足の補足
プラグインをエンジンフォルダにも入れていたら競合するから気を付けて
(僕は毎年恒例行事のようにハマってます)
またこのエラーにハマった。
— TARK (ISKJ) (@LideTark) 2021年10月4日
毎年調べて自分のツイートに気づく。 https://t.co/wBxmnkPkFX
第16回ぷちコンの振り返り ネタだし編
初めに
ヒストリア様が企画している学習コンテストに初参加しました
応募作品「未知草。」youtu.be英語、解説字幕アリです
企画
当初は、道というテーマで交通整理のゲームを検討しました
youtu.be
しかし、ぷちコン参加した裏テーマが「完璧を求めず、ちゃっちゃと作る」だったので、もっとシンプルなものにしようと没にしました
夏休みの宿題を8月末やるタイプなので、あっという間に締切1週間前...
もういいや...出すのやめよう..仕事の締切もあるし...
遅くなったしシャワー浴びて寝よう...
そんな深夜2時にネタが浮かんだので、勢いで整理しました
思考整理
思考整理のツールとして下記のツールを使用しています
- Notion
- Frieve Editor
とくに、Frieve Editorは直感的にアイディアを作成して、
自由にリンクをつなげるので愛用しています
テーマ決定
未知飛行物体の攻撃により、地面が底なし沼に。手すりや電柱を伝って移動するアクションゲーム「未知草。」となりました
次回気が向いたら実装部分の説明をしたい
VR Spectator ScreenのUMG表示とVRPawnのリプレイ挙動について
本記事はUnreal Engine 4 (UE4) その3 Advent Calendar 2020 21日目の記事です。
UE4.26で作成。
はじめに
こんにちは。TARKと申します。
家業の配管屋を手伝いながら、トレーニングVRを作っています。素人の私がVRアプリを作成するうえで、UE4の公式ドキュメント、オンラインラーニング、SNS、書籍より学んだ情報を自己解釈混じりでお伝えしたいと思います。
主な内容
宜しくお願いします。
■VR Spectator Screen機能に操作可能なUMGを表示したい
VR Spectator Screen機能使っていますか?
なにそれ?という方は是非、おかずさんのブログを確認してみてください。
VR Spectator Screen機能は、HMD上の映像とは異なる映像をPCモニタに出力する機能です。

VRHMD画面

PCモニタ出力画面

この機能を使っていると、図のようにPCモニタに専用のUMG表示したいとふつふつ感じるわけです。 しかし、PCモニタ上に表示されているものは、テクスチャです。
Inside UnrealでVictor Brodin氏は、
通常、テクスチャ上にUMGを表示する方法はないと述べており、
BlueprintでUMGを表示したい場合は、3DWidgetをカメラアタッチし、画面のマウス位置を取得する方法を提案しています。
1:06:30より~該当箇所
解決案
いろいろ模索した結果、Unreal Engine Forumsに解決方法がありました。
目的に合致するものは「UnrealVrSpectatorControl」でした。
UnrealVrSpectatorControl仕組み
(バーチャルリアリティテンプレートの場合)

- レベルで、SceneCapture2Dより描画ターゲットを取得
- PawnにWidgetとWidgetInteractionを配置し、描画ターゲットを表示
- PawnのWidgetをTextureとしてSpectatorScreenに設定

そしてSpectatorScreen上のマウス位置情報を取得し、Widgetの位置に変換しWidgetInteraction位置を設定しています。
Calem Bendell氏の関数
詳しくは、氏のドキュメントを確認してください。
C++のコードを見たらそっとサイトを閉じる方。わかる。わかります。私も同じ。でも、一緒に勉強しましょう!あ、ちなみに、プラグインで配布もされているからC++分からなくても実装できました。
【2021/10/05】一部環境でコード作業が必要でしたので、記事を投稿しました。

是非試してみてください。
新たな課題の発覚
再現性
ビルドもしくは、スタンドアローンでVRSpectatorScreenを実行。
HMDを外すとVRSpectatorScreenのFPSがガタ落ちする。PIEでは起きない。
暫定対応
HMDを外した時、SpectatorScreenをオフにして、非VRPawnでUMGを表示

もし、いい対処法があったらヒントをいただければ幸いです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
■VR体験をリプレイで確認したい
課題
リプレイシステムの何がわからないかが、わからない。
リプレイ以前に学ぶべき仕組みを理解してない。
解決策
公式ドキュメントを熟読。
マルチプレイヤーにセットアップされたプロジェクトは、リプレイ システムと互換性があるという点から、マルチプレイの仕組みを押さえていないと学習が進まないことに気づきました。
私はまったく分からなかったので、書籍やSlideShare、Youtubeで学習。
なんとなく理解ができたところで、C++を写経し、手を動かす。
そして、コンソールコマンドでリプレイできることにようやく気付く。
過程や方法なぞどうでもよいのだーという人は、ThirdPersonテンプレートを作成し、ThirdPersonCharacterに下記を追加するだけで、リプレイが実行できます。

やったね!
VRテンプレートにリプレイ実装時のエラー例
同じ要領でVRテンプレートにReplayを実装した時につまずいた点を紹介
エラー①録画時に水色の箱を掴んでも、Replay時に反映されない

原因

Replicate MovementとReplicatesにチェックを入れてなかった。
マルチプレイ同期には必須な項目でした。
エラー②VRPawnの動きがカクカクする。
これはなかなか情報源がなく、探すの苦労しました。
画面がカクカクする=choppy?
見つかりました!
原因
”demo.RecordHz”の値が低かった。デフォルト値=8
コンソールコマンドで60に変更
Replay demoRecordHz 比較#UE4Study pic.twitter.com/s7TeoT8Yih
— TARK (@LideTark) 2020年12月18日
最後に
まとまりのない記事となってしまいましたが、どこかの誰かに刺さる内容であれば幸いです。