UE5 3DGS のよくある不具合を現象から特定する
このページは見えている現象で整理してある。各項目で考えられる原因、確認方法、解決方法を示す。
ログの確認方法やデバッグツールの使い方は ログと診断 を参照する。相談タイプの質問(どの形式に対応しているか、2 つのパイプラインの違いなど)は よくある質問 を参照する。
目次
| 分類 | 扱う現象 |
|---|---|
| まずこの 2 つを行う | どの問題でもまず一通り実施することを推奨する |
| データの読み込み失敗 | Load を押しても反応がない、パッケージ化後に見えない、Blueprint プロジェクトのパッケージ化、GIS の位置がずれる、大きなデータでクラッシュ |
| 画面が表示されないか一部しか表示されない | まったく見えない、遠くが欠ける、端に穴が空く、SceneCapture が空白、水面に遮られる |
| 画質の問題 | 残像、ちらつき、穴、カラーがくすむ、継ぎ目、シーンに線が 1 本入る |
| ライティングの異常 | 露出オーバー、立体感のある明暗がない、ProxyMesh が効かない、影が途切れる、エフェクトが隠れる |
| パラメーターを変更しても効果がない | チェックボックス未チェック、全量読み込み、クリッピングと断面、球面調和、ライセンスの枠 |
| パフォーマンスの問題 | フレームレートが低い、ビデオメモリが多い、読み込み時のカクつき、オクルージョンの誤り |
| コリジョンとナビゲーション | レイキャストが当たらない、キャラクターが落下してすり抜ける、NavMesh が生成されない |
| クラッシュ | ArraySliceIndex のアサーションエラー |
| ライセンスの問題 | Status が緑のチェックにならない、各種ライセンスエラー |
| コンパイルとパッケージ化 | バイナリの不足、プリコンパイルマニフェストの不足、パッケージ化の失敗、Android |
| それでも解決しない場合 | 問題を報告する前に集めるもの |
まずこの 2 つを行う
ほとんどの問題はこの 2 つの手順の範囲で特定できる。どの現象でもまず一通り実施することを推奨する。
- Output Log を開いてプラグインのログを見る。 読み込みの失敗、パスの誤り、ライセンスの問題はいずれもここに明確な情報が残る。方法は プラグインのログを確認する を参照する。
- データの読み込みが成功しているか確認する。 Actor を選択し、Details パネルの MetaInfo に内容があるか(Total Splats が 0 より大きいか)を見る。空の場合はデータが入っていないので、データの読み込み失敗 に直接進む。
データの読み込み失敗
現象:Load を押したが何も表示されない
順に確認する。
| 考えられる原因 | 確認方法 | 解決 |
|---|---|---|
| パスが存在しないか誤っている | ログに LCC file :<パス> does not exist. が出る | パスを照合する。相対パスは Content を基準にする |
| LCC1 のデータにファイルが足りない | ログに Load Meta.lcc error または meta.lcc file :<パス> load error が出る | .lcc と同じディレクトリに data.bin と index.bin が必要で、1 つ欠けても失敗する |
| Actor を間違えている | 明確なエラーは出ないが画面が空白になる | .lcc2 は ALCC2Actor、.lcc は ALCCActor、単一ファイル形式はそれぞれ専用の Actor を使う。よくある質問 を参照する |
| 形式が非対応 | ログに LCC4Unreal do not support this file format! が出る | 拡張子が対応範囲内か確認する。概要 を参照する |
.ply が 3DGS 形式ではない | ログに PLY が拒否された旨が出る | プラグインは 3DGS の属性を含む .ply にのみ対応する。通常のジオメトリ点群は読み込めない |
現象:エディターでは正常だが、パッケージ化後に見えない
順に 2 つのことを確認する。
1 つ目、絶対パスを使っていないか。 絶対パスは自分のマシンでのみ有効で、別のマシンではパスが存在しない。プロジェクトの Content ディレクトリからの相対パスに変更する。たとえば Scenes/Tower/meta.lcc2 のようにする。
2 つ目、データディレクトリをパッケージ化の設定に入れているか。 2 つの設定項目は用途が異なるので、必要に応じて選ぶ。
| 設定項目 | 用途 |
|---|---|
Additional Non-Asset Directories To Copy | データを通常のファイルとしてパッケージ出力にコピーする |
Additional Non-Asset Directories To Package | データを pak に格納する |
LCC データを pak に含めたい場合は後者を、データをパッケージ出力と一緒に配布したいだけの場合は前者を使う。どちらも ProjectSettings > Packaging にある。
設定したら再パッケージ化し、パッケージ出力にデータが実際に入っているか確認する。詳しい設定は クイックスタート を参照する。
現象:Blueprint プロジェクトのパッケージ化後にプラグインが動かない
Blueprint のみのプロジェクト(Blueprint-only)はエディターでの使用にのみ対応し、パッケージ化には対応しない。パッケージ化が必要な場合は C++ プロジェクトを使う必要がある。
現象:地理座標の位置がずれる、GIS モードが効かない
次の項目を確認する。
- データに RTK 情報が含まれているか。
GetMetaInfo().IsRTK()で判定する。ログにThis lcc does not have RTK information!が出る場合はデータに地理情報が含まれていない - コードから有効にする場合は
SetGeoPlacement(true)を呼ぶ。この関数は自動的に再読み込みして設定を反映する。bEnableGeoPlaceに直接代入しても再読み込みはトリガーされない - 位置にずれがある場合は
GeoLocationOffsetで微調整する
Cesium と組み合わせる構築手順は サードパーティおよびエンジンプラグインとの連携 を参照する。
現象:非常に大きな LCC2 データを読み込むとウォークスルー中にクラッシュする
v1.0.0 を使っている場合、これはそのバージョンの既知の不具合である(GPU Buffer の上限超過)。v2.x 以上のバージョンにアップグレードすれば解決する。
現象:大きな PLY を読み込むと配列関連のエラーが出る
v3.0.0 の既知の不具合で、v3.3.0 以上で修正済みなので、バージョンをアップグレードすればよい。
また PLY に球面調和が含まれない場合、ファイルが 2GB を超えると読み込めないことがある。LCC2 形式に変換することを推奨する。
画面が表示されないか一部しか表示されない
現象:Actor はシーンにあるが、内容がまったく見えない
| 考えられる原因 | 確認方法 | 解決 |
|---|---|---|
| データの読み込みが成功していない | 前節を参照する | まず読み込みの問題を解決する |
LoadMode が None になっている | Details パネルを確認する | Both に戻す |
| カメラがレンダリング距離の外にある | シーンに近づいて表示されるか確認する | Max Distance を大きくする |
| クリッピングボリュームが内容を切り取っている | 一時的にクリッピングボリュームの bEnabled をオフにする | クリッピングモードを確認する。Inside と Outside は効果が逆になる。EClipType を参照する |
| 断面プレーンが内容を切り取っている | 一時的に断面プレーンをオフにする | Mode とプレーンの向きを確認する。ESectionType を参照する |
GlobalAlpha が 0 になっている | Details パネルを確認する | 1.0 に戻す |
すべて環境データなのに OnlyMain に設定している | LoadMode を切り替えて比較する | データの実際の状況に応じて選ぶ。ELoadMode を参照する |
現象:遠くの内容が欠け、近づくと表示される
これは LOD と距離制限の正常な挙動であり、不具合ではない。遠くも表示させたい場合は次のようにする。
- Max Distance を大きくする。引き換えにパフォーマンスが下がる
- Level Factor を小さくして、同じ距離でより高い精度を使わせる
- フォグと組み合わせると距離の境界を隠せる
現象:視点を素早く回すと画面端に穴が空く
ノードのプリロードが視点の変化に追いついていない。LCC パイプラインでは Add Extra Preload Nodes を有効にできる。追加のプリロードノードを加えるが、引き換えにレンダリングが必要なノードが増える。
現象:SceneCapture やミニマップが空白になる
まずプロジェクト設定で SceneCaptureComponent Support を有効にする必要がある。この項目は既定でオフになっており、わずかなパフォーマンスの代償がある。
コードで SceneCapture に個別のレンダリング方針を設定する方法は SetSceneCaptureRenderMode を参照する。このインターフェース群は LCC パイプラインでのみ有効である点に注意する。
現象:3DGS が水面に遮られる
単層水マテリアルの深度処理によるものである。SingleLayerWater Support を有効にする。Single layer water 対応 を参照する。
画質の問題
現象:移動すると残像や尾を引く
アンチエイリアスの方式によるものである。TSR と TAA は過去のフレームを使って時間方向に蓄積するため、3DGS が移動すると前のフレームの画面が残りやすい。
順に試して、画質と残像のバランスが取れる点を探す。
None → FXAA → MSAA → TAA → TSR
シーンに 3DGS しかない場合は None に設定してよい。残像も出ず、アンチエイリアスのコストも省ける。各パイプラインの既定値と設定場所は パフォーマンスパラメーター を参照する。
現象:画面がちらつく、縁が揺れる
効果の大きい順に試す。
- アンチエイリアスの方式を確認する。これがもっとも多い原因で、LCC2 パイプラインでは TSR を推奨する。パフォーマンスパラメーター を参照する。
- LCC パイプライン:Sort Factor を下げてソート頻度を上げる。ソート頻度が低すぎると、半透明の前後関係が数フレームごとにしか更新されず、画面がわずかに揺れて見える。
- Small Splat Threshold を確認する。値が大きすぎると遠景に粒状感が出る。
- カメラを前後に動かす過程で細かい構造がちらつく場合は Mip Filter を試す。不透明度の補正を伴うローパスフィルターを 1 回かけるため、スケールが変わっても安定する。
.ply/.spz/.sogはこの項目が既定でオフになっている。
現象:画面に穴が空く、疎になる
SplatScale を小さくしすぎている。既定値 1.0 が上限で、小さくすると Overdraw が減ってフレームレートは上がるが、面が小さくなって隙間が見えるようになる。少し大きい方向に戻す。
現象:カラーがくすむ、平坦に見える
調色のパラメーターで対処する。画面調節 を参照する。よく使う方法は Contrast をわずかに上げる、または Gamma で暗部を持ち上げることである。コードのインターフェースは Color Adjustment を参照する。
現象:画面の継ぎ目が目立つ(LCC パイプライン)
LCC ファイルのバージョン 5.0 以上では継ぎ目が自動的に処理される。それより古いバージョンのデータでは 継ぎ目のカット を手動で有効にできる。対応するプロパティは bEnableSeamCutting である。
現象:シーンに線が 1 本入る
Actor のスケールを確認する。LCC 系の Actor(ALCCActor、ALCC2Actor、ASogActor、ASpzActor、APlyActor)は等比のスケールにのみ対応する。
次のような非等比のスケールは使わない。
- 負の値を含むもの。たとえば
(-1, 1, 1) - 軸ごとに値が異なるもの。たとえば
(2, 1, 3)
3 つの軸は必ず一致させる。たとえば (1, 1, 1) や (2, 2, 2) にする。非等比のスケールはレンダリングの異常を招き、画面上では線が 1 本入るように見える。
ライティングの異常
現象:Lit に切り替えると画面が露出オーバーになる
撮影したデータのカラーには撮影現場のライティングがすでにベイクされており、シーンのライトがその上にもう 1 層重なる。
- LCC2 パイプライン:
LightingScaleで元の明るさを下げる。法線とライティング を参照する - シーンのライティングの強度が高すぎないか確認する
現象:Lit モードでも立体感のある明暗が出ず、画面が平坦になる
これは想定どおりの挙動である。3DGS のデータはジオメトリ法線を持たないため、Fixed、ViewFacing、Hemispherical の 3 つのモードはいずれも近似的な手段で法線を作っており、全体の明るさの変化しか生み出せず、どれも形状の起伏に沿った明暗を作ることはできない。各モードの定義は ELCC2NormalGenerationMode を参照する。
実際の立体感のある明暗が必要な場合、それを実現できるのは ProxyMesh モードだけである。プロキシメッシュを作って配置する必要があり、ライセンスも必要になる。プロキシメッシュ と 法線とライティング を参照する。
3 つの近似モードの違いは、全体の明るさがライティングと視点に応じてどう変わるかであり、立体感のある明暗の有無ではない。
Fixed:全体で 1 つの固定法線を共有し、カメラが移動しても完全に安定するViewFacing:法線がカメラに追従し、視点を回すと全体の明るさが変わるHemispherical:法線が画面上の位置から固定の半球にマッピングされ、ディレクショナルライトを回したときの全体の明るさの遷移が前の 2 つより滑らかになる
現象:ProxyMesh モードを設定したが効果が出ない
| 確認項目 | 確認方法 |
|---|---|
| NormalMode が ProxyMesh になっているか | Details パネルを確認する |
| ライセンスが有効か | プラグインパネルの Status を見る。緑のチェックはライセンスが正常であることを示す。コードから GetEffectiveNormalGenerationMode() を呼んでもよく、Fixed が返る場合はフォールバックしている |
| プロキシメッシュに StaticMesh があるか | ログに has a null StaticMesh の警告が出る |
| プロキシメッシュが 3DGS と空間的に重なっているか | ペアリングは位置で判定するため、重なっていないと効かない |
詳しくは プロキシメッシュ を参照する。
現象:明暗が誤った位置に出る
プロキシメッシュと 3DGS の実際の表面のずれが大きすぎる。プロキシメッシュの一致度を改善するか、近似の法線モードに切り替える。後者は立体感のある明暗はないが、より安定している。
現象:ProxyMesh の影が近くにしか出ず、遠くでなくなる
影が距離で途切れている。これはエンジン自体の問題で、プラグインの不具合ではない。
解決方法:ProxyMesh Actor を選択し、Far Shadow(遠距離の影)をオフにしてから再度オンにすると、影が完全な状態に戻る。プロパティは StaticMeshComponent の Lighting カテゴリーにある。
現象:Lit モードで巨大な異常な影が出る
近似の法線モードは、特定のライティングの角度で異常を生じることがある。順に試す。
- NormalMode を切り替えて、どのモードで正常になるか確認する
- ディレクショナルライトの角度を調整する
- ProxyMesh モードに変更し、形状の合ったプロキシメッシュを用意する。これが最も結果の良い方法である
現象:影を有効にするとカラーが変わる
これは想定どおりの挙動である。3DGS が外部のライティングを受けるとカラーが光源に応じて変化するので、ディレクショナルライトのカラーと強度を調整すればよい。
現象:明るさが変わらない、シーン全体が暗めになる
プロジェクトで Composure のような合成プラグインを使っている場合は、Component の後処理関連のオプションをオフにし、Post Process Volume で露出を制御するように変更する必要がある。
露出関連の設定は 画面調節 を参照する。
現象:Niagara のエフェクトが 3DGS 上で見えない
LCC2 パイプラインは深度を出力するため、エフェクトのオクルージョンの関係は正しくなるので、通常この問題は起きない。
LCC パイプライン(.lcc データ)でのみ起こりうる。深度を出力しないため、半透明の前後関係をソートの優先度で決める必要があるからである。解決方法は、Niagara System の Translucent Sort Priority をより大きい値にして、3DGS の上にレンダリングさせることである。
現象:シーンの外周に雑然とした内容がある
それは環境データである。LoadMode を Both から OnlyMain に変更して、主体のみをレンダリングする。
現象:ライティングモードを切り替えても反応がない
点群モードでは SetLightMode が無効になり、代入をスキップして警告ログを出力する。まず 3DGS モードに戻す。
現象:Lit モードに切り替えてもライティング効果がない
フォワードレンダリングパイプライン(Forward Shading)には GBuffer がないため、リライティングは使用できない。LightMode を Lit に設定しても効果がない。
ディファードレンダリングパイプライン(Deferred Shading)に切り替えれば Lit モードが正常に動作する。Project Settings > Rendering > Forward Shading のチェックを外す。なお、UE の VR テンプレートではデフォルトで Forward Shading が有効になっているため、手動でオフにする必要がある。
パラメーターを変更しても効果がない
現象:Performance の数値を変更したが変化がない
各パラメーターの左側にはチェックボックスがあり、チェックしていない場合はプラグイン内蔵の既定値が使われて、入力した数値は反映されない。 これがもっともよくある落とし穴である。
各パラメーターの内蔵の既定値は パフォーマンスパラメーター を参照する。
現象:全量読み込みのパラメーターを変更したが変化がない
Use Full Load と Full Load Splat Number は読み込み時に判定されるため、変更後はデータを再読み込みしないと反映されない。
2 つの読み込み方式の違いは レンダリング を参照する。
現象:実行時にクリッピングボリュームや断面プレーンのプロパティを変更しても反応がない
bEnabled、Mode、VolumeType などのプロパティには Setter がないため、実行時に代入した後はその Actor の Refresh() を必ず呼ぶ。実行時にトランスフォーム(位置、回転)を変更した場合も同様である。
エディターで Details パネルからプロパティを変更した場合は自動的に更新されるので、手動で呼ぶ必要はない。
詳しくは ALCCClippingVolume を参照する。
現象:球面調和を有効にしても画面が変わらない
- データが
Portableタイプで、そもそも球面調和を含まない可能性がある。CanSetShcoef() で確認する。タイプの定義は EFileType を参照する - 点群モードでは SetUseShcoef が黙って無効になるので、まず 3DGS に戻す
- LCC2 では SetUseShcoef で球面調和をオフにできる
現象:クリッピングボリュームを多く追加したが一部しか効かない
無償版は各種類 50 個に制限される。ログに明確な通知が出る:Unlicensed: enabled clipping volumes limited to 50 ...。ライセンスの説明は エディションとライセンス を参照する。
パフォーマンスの問題
フレームレートが低い場合の完全なチューニングの流れは パフォーマンス最適化ガイド を参照する。ここでは素早い判断のみを挙げる。
現象:フレームレートが低い
まずボトルネックが 3DGS かどうかを確認する。stat unit で Game / Draw / GPU の 3 項目を見て、次に stat XGrids で LCC 自身の処理時間を見る。LCC の処理時間の比率が高くない場合、問題はシーンの他の部分(ライティング、後処理、Blueprint のロジック)にあるので、LCC のパラメーターを調整しても改善しない。
3DGS が原因だと確認できたら、効果の大きい順に調整する。
- Level Factor を大きくする(もっとも効果が明らか)
- Max Distance を小さくする
- Max Splat Num を小さくする
- Start Level を上げて最も細かい階層をスキップする
- 球面調和をオフにする
- 必要なら 点群モード に切り替える
現象:ビデオメモリの使用量が多すぎる
- Level Factor を大きくする
- Max Splat Num を小さくする
- LCC2 パイプラインでは LCC2 GPU Memory Budget を調整する
- Max GPU Usage Percetage For Free の解放しきい値を調整する
ビデオメモリの割り当てルールと自動解放の仕組みは レンダリング を参照する。単一ファイル形式(.sog / .spz / .ply)は一度に全量が読み込まれるため、ビデオメモリの使用量は一定で視点によって変化しない。単一ファイル形式の読み込み上限 を参照する。
現象:読み込み時にカクつく
- コリジョンを初めて有効にするときに 1 回ベイクのコストが発生するので、できるだけ読み込みの段階で有効にしておき、プレイヤーの操作中に途中で有効にしない
- Max Load Collision Distance を小さくして、必要な範囲だけを読み込む
- スレッドの設定を調整する。パフォーマンスパラメーター を参照する
現象:複数の 3DGS が交差しているときにオクルージョンの関係が誤る
- LCC パイプライン:複数 Actor の半透明ソート を有効にする
- LCC2 パイプライン:深度しきい値 を調整して深度の書き込み位置を変える
コリジョンとナビゲーション
現象:レイキャストが 3DGS に当たらない
| 確認項目 | 対処 |
|---|---|
| データにコリジョンが含まれているか | 単一ファイル形式はコリジョンデータを含まない。前提条件 を参照する |
| コリジョンが有効になっているか | bEnableCollision をチェックする。有効にする を参照する |
| その位置にコリジョンが読み込まれているか | ShowCollision() でワイヤーフレームを見る。コリジョンの可視化 を参照する |
| 検出距離がコリジョンの読み込み範囲を超えていないか | Max Load Collision Distance を大きくする |
ログに There is neither collision.bin nor collision.lci in the folder が出る場合は、データディレクトリにコリジョンファイルがない。
LCC1 には点群の位置に対するレイキャストのインターフェースも別にあるが、十分にテストされていないため、コリジョンとエンジンのレイキャストを優先して使うことを推奨する。ULCCComponent Raycast を参照する。
現象:キャラクターが最初から落下していく
コリジョンはブロック単位の動的読み込みなので、ゲーム開始直後はコリジョンデータの構築が終わっていない可能性がある。このときキャラクターの足元にコリジョンがなければ落下してしまう。
対処方法:
- PlayerStart を地面から少し高い位置に置く
- または数秒遅らせてからキャラクターの移動を許可する
- できるだけ読み込みの段階でコリジョンを有効にし、プレイヤーが操作を始めてから有効にしない
現象:キャラクターがすり抜ける、一定の距離より外へ行くと落下する
コリジョンは距離に応じたストリーミング読み込みなので、読み込み範囲を超えた場所にはコリジョンボディがない。Max Load Collision Distance(m) を大きくして、キャラクターの活動範囲を覆う。
キャラクターの移動が速すぎる場合もコリジョンが追いつかないことがある。これも読み込み距離を大きくすることで緩和できる。
現象:NavMesh がまったく生成されない
| 確認項目 | 対処 |
|---|---|
| データにコリジョンが含まれていない | .lcc または .lcc2 を使っていることを確認する。単一ファイル形式にはコリジョンデータがない |
| コリジョンが有効になっていない | bEnableCollision をチェックし、CanEverAffectNavigation = true も確認する |
| コリジョンの読み込みが完了していない | ビューモードで Player Collision または Visibility Collision を選び、対象領域にコリジョンボディが現れていることを確認する |
| コリジョンの読み込み範囲が不足している | Max Load Collision Distance(m) を大きくして AI の活動領域全体を覆う |
| NavMeshBoundsVolume がない、または覆っていない | 配置して対象領域を覆うまで拡大縮小する |
| ナビゲーションを再構築していない | Build → Build Paths を実行してレベルを保存する |
完全な流れは ナビゲーションシステム対応 を参照する。
クラッシュ
現象:ArraySliceIndex のアサーションエラーが出てクラッシュする
次のような形のエラーが出る。
Assertion failed: ArraySliceIndex >= 0
原因は、現在のバージョンがSubstrate の Adaptive GBuffer 形式に対応していないことである。
解決方法:
ProjectSettings > Renderingを開き、Substrate GBuffer Format (Project) を見つける。- 値を BlendableGBuffer に変更する。これがエンジンの既定値である。
- エンジンを再起動する。
AdaptiveGBuffer は非互換であることが分かっている形式で、BlendableGBuffer では正常に動作する。
ライセンスの問題
まずプラグインパネルの Status を見る。 緑のチェックはライセンスが正常であることを示し、この状態なら Pro 版の機能が使える。緑のチェックでない場合はライセンスが有効になっていないので、ログで原因を確認する。
ログのライセンス関連の情報はいずれも比較的明確なので、内容に従って対処する。
| ログの情報 | 意味と対処 |
|---|---|
ProjectID is invalid; generate one in Project Settings | プロジェクトに Project ID がない。Project Settings > Project > Description で生成する |
Failed to decode AppKey, please check. | AppKey の内容が不完全か、コピーの誤りがある。もう一度コピーする |
Invalid AppKey, please check. | AppKey の形式が正しくない。開発者プラットフォームから取得した完全な文字列であることを確認する |
Authorization has expired, please check. | ライセンスの期限が切れている。開発者プラットフォームで再生成する |
AppKey has expired. Please generate a new one. | 同上 |
HTTP request failed / HTTP error! Status: <code> | ネットワークの問題か、ライセンスサーバーにアクセスできない。ネットワークとファイアウォールを確認する |
Signature Verification Failed | 署名の検証に失敗した。テクニカルサポートに連絡する |
ライセンスの流れは エディションとライセンス を参照する。
コンパイルとパッケージ化
現象:バイナリファイルが足りない、またはモジュールのコンパイルが失敗する
次のいずれかのエラーが出た場合は、本節の手順でプロジェクトを再生成してコンパイルする。
Missing UnrealGame binary. You may have to build the UE project with your IDE.
Alternatively, build using UnrealBuildTool with the commandline:
UnrealGame <Platform> <Configuration>
*** could not be compiled. Try rebuilding from source manually
原因は、C++ プロジェクトにプラグインを追加した後、エンジンが新しいモジュールを検出したが対応するコンパイル成果物がないことである。次の手順で対処する。
- プロジェクトを閉じる。
- プロジェクトに対応する
*.uprojectファイルを見つける。 *.uprojectを右クリックし、メニューから Generate Visual Studio project files を選ぶ。- VS のプロジェクトの再生成が完了するまで待つ。
*.slnをダブルクリックして Visual Studio を開く。- ソリューションエクスプローラーでプロジェクトを右クリックし、Set as Startup Project を選んで、スタートアッププロジェクトになっていることを確認する。
- プロジェクトの構成が Development Editor と Win64 になっていることを確認する。
- Debug > Start Without Debugging をクリックしてプロジェクトを起動する。
- コンパイルが通れば通常どおりプロジェクトを開ける。以降は
*.uprojectを直接ダブルクリックして開けばよく、毎回この流れを踏む必要はない。
上記の手順を行っても失敗する場合は、先にプロジェクトの Intermediate ディレクトリを削除し、手順 3 からもう一度実行する。
プラグインのインストール手順は クイックスタート を参照する。
現象:パッケージ化が失敗する
まず次の 3 点を確認する。
ProjectSettings > Packagingの Full Rebuild はオフのままにする。あわせて VS で Rebuild を実行しない。プラグインはこの 2 つの方式に対応していない。クイックスタート を参照する- C++ プロジェクトを使っていることを確認する。Blueprint プロジェクトはパッケージ化できない
- エンジンバージョンが対応範囲内であることを確認する(UE 5.4 ~ 5.8)
具体的なエラーは以下の 2 つの節を参照する。
現象:パッケージ化時にプリコンパイルマニフェストが足りないというエラーが出る
次のような形のエラーが出る。
Missing precompiled manifest for 'LCC4UnrealRuntime',
'\Shipping\LCC4UnrealRuntime\LCC4UnrealRuntime.precompiled'.
This module was most likely not flagged for being included in a precompiled build
- set 'PrecompileForTargets = PrecompileTargetsType.Any;' in LCC4UnrealRuntime.build.cs
to override. If part of a plugin, also check if its 'Type' is correct.
なぜ起きるか: エラーが指しているこれらのファイルは、もともとプラグインと一緒に配布されており、プラグインの Intermediate ディレクトリにある。ProjectSettings > Packaging の Full Rebuild を実行したり、VS で Rebuild を実行したりすると、エンジンが Intermediate ディレクトリをクリアし、これらのプリコンパイル成果物も一緒に削除してしまう。
LCC4Unreal はバイナリのプラグインでソースを含まないため、削除された成果物は再コンパイルして生成できない。プラグインパッケージから復元するしかない。したがってこの 2 つの操作は避ける必要がある。
修復方法:
ProjectSettings > Packagingの Full Rebuild がオフになっていることを確認し、VS で Rebuild を実行しない。- プラグインの
lcc4unreal/Intermediate/Build/Win64/UnrealGameディレクトリの内容を、プロジェクトの<プロジェクトディレクトリ>/Intermediate/Build/Win64/<プロジェクト名>ディレクトリにコピーする。 - プラグインの
lcc4unreal/Intermediate/Build/Win64/x64ディレクトリの内容を、プロジェクトの<プロジェクトディレクトリ>/Intermediate/Build/Win64/x64ディレクトリにコピーする。 - エンジンを再起動してから再パッケージ化する。
手順 2 のコピー先のディレクトリ名はプロジェクト名であり、
UnrealGameではない。たとえばプロジェクト名がMyProjectなら、コピー先のパスはMyProject/Intermediate/Build/Win64/MyProjectになる。
エラーが他のファイルを指している場合: 上の 2 つのディレクトリでよくあるケースは網羅できる。エラーが別のファイルを指している場合も同じ考え方で対処し、プラグインの Intermediate ディレクトリ内で同じ相対パスにあるそのファイルを見つけて、プロジェクトの対応する位置にコピーすればよい。
プラグインの Intermediate ディレクトリ自体もクリアされてしまった場合: コピー元がなくなるので、プラグインパッケージを再ダウンロードして解凍し上書きすれば復元できる。
現象:カスタムエンジンでコンパイルが通らない
公開されているプラグインパッケージは Epic が公式にリリースしたエンジンにのみ適用できる。ベンダーのカスタムブランチ、UE をベースに二次開発された商用エンジン、ソースを独自に改変したエンジンはいずれもカスタムの対応が必要になる。カスタムエンジンバージョン を参照する。
現象:Android へのパッケージ化でエラーが出る
現在のバージョンは Android プラットフォームへの直接のパッケージ化に対応していない。これはプラットフォームの互換性の制限であり、パッケージ化の設定を変更しても解決しない。
VR デバイスで使う必要がある場合は、PC 側で実行してストリーミングする方式を使う。クイックスタート - Quest3 を参照する。
それでも解決しない場合
次の情報を集めてから連絡する。お問い合わせ を参照する。
- プラグインのバージョンとエンジンのバージョン
- データ形式とおおよその規模
- 問題が起きた実行時の完全なログファイル。フィルターをかけず、エラーの数行だけを切り出さない
- 再現手順
- グラフィックスカードの型番とドライバーのバージョン
ログファイルの場所やその他の詳細は ログと診断 を参照する。