第0030回 / Packageビルドとエディタ専用機能 | HK-87@UEのブログ

HK-87@UEのブログ

UE4で理想のVRゲームを作るまでの軌跡

さて。
以前の調査で、
UE4はEditorビルドでは動くけれどもGameビルドでは動かないコードが簡単に書けそう
という懸念を感じていた。

この区切りに一度確認しておきたい。

パッケージビルドを試してみる。
ビルドはメニューの File  -> Package Project からいけた。

ビルド完了 -> 実行 -> クラッシュ。

・・・案の定か。

CallStackは表示されるものの、シンボルが取れていない。
.pdb ファイルはどこにある?

答えはここに書いてあった。

[UE4] パッケージ済み実行ファイルをVisualStudioでデバッグする方法
http://historia.co.jp/archives/4496/
 

> Project Settings -> Packaging の「Include Debug Files」をONにして下さい。

とのこと。


いろいろ試行錯誤したのち、ログをよく見ると Error が出ていることに気づく。

Error: Couldn't find file for package /Script/ActorLayerUtilities requested by async loading code. NameToLoad: /Script/ActorLayerUtilities
Error: Found 1 dependent packages...
Error:   /Game/VirtualRealityBP/Maps/MotionControllerMap
Error: Struct type unknown for property 'StructProperty /Game/VirtualRealityBP/Maps/MotionControllerMap.MotionControllerMap_C:ExecuteUbergraph_MotionControllerMap.K2Node_MakeStruct_ActorLayer'; perhaps the USTRUCT() was renamed or deleted?
 :
Script Stack (2 frames):
MotionControllerMap_C.ExecuteUbergraph_MotionControllerMap
MotionControllerMap_C.ReceiveBeginPlay

うむむ。。。

MotionControllerMap が依存している /Script/ActorLayerUtilities というものがない、
ということらしいが、何のことだかわからない。

この /Script/ActorLayerUtilities というのは何なのか?
パスっぽいけれども /Script/ なんてフォルダは無いし・・・

さらにこの長ったらしい名前
~ExecuteUbergraph_MotionControllerMap.K2Node_MakeStruct_ActorLayer~
というのも何なのか?

StructPropertyとは?

自動生成っぽいのでBPの何かなんだろうけれども、
どこの何が怒られているのか、さっぱりわからない。

最後の
MotionControllerMap_C.ReceiveBeginPlay
から、おそらく何らかの BeginPlay が関連しているのだろう、と思われるので
1つづつ消して確かめてみる。。。

・・・ん?
ActorLayerで一つ思い出した。。

そういえばレベルブループリントの BeginPlay の中で
9個のLandscapeをシステムに登録するのにLayerという機能を使っていた。

第0021回 / Landscapeをプレイヤーの移動に合わせて配置する
https://ameblo.jp/ue4-master/entry-12496979333.html

このLayerの仕組みはもしかして Editor 専用機能なのでは?

という当たりをつけてソースを検索してみる。

ActorLayerutilities.uplugin の中にこんな記述を見つけた。
 "Type" : "Developer",
 "Type" : "Editor",

他の .plugin を見ると、Typeの種類には他にも
 "Runtime"
 "RuntimeNoCommandlet"
 "RuntimeAndprogram"
 "ClientOnly"
などがあるらしい。

ActorLayerutilities.uplugin には "Runtime" の定義がない。
つまりはRuntime(≒ゲームビルド)では使えない、ということだろう。

Get Actors を Get All Actors Of Class に置き換えてみる。

動いた~~。
・・・けれど、あれ?VRモードになっていない?

ググる。

UE4でOculus Rift対応ソフトを作るには
https://framesynthesis.jp/tech/unrealengine/oculusrift/

Project Settings の
Project -> Description -> Start in VR
にチェックを入れればいいらしい。

これで解決ー


・・・
それにしても Editor オンリーの機能を BP で簡単に使えてしまう問題は
なんとかならないものだろうか?

世の中にUE4デベロッパーがこれだけいて、
こんな問題は真っ先につぶしていると思うのだけれど・・・。