SpawnActor failed because no class was specifiedが発生したときの対応

問題

ABulletClass型の変数を定義して
BluePrintからアセットを指定した状態で

// header
UPROPERTY(EditDefaultsOnly)
TSoftClassPtr<ABulletClass> BulletAsset;

CPPのBeginPlayなどで以下のように呼び出す

// cpp
ABulletClass* bullet = GetWorld()->SpawnActor<ABulletClass>(BulletAsset.Get());

すると
LogSpawn: Warning: SpawnActor failed because no class was specified
エラーが発生する。

解決法

softrefで参照しているクラスを一度でもloadすると解消する問題のようです。
事前にLoadする処理を挟むか

// cpp
ABulletClass* bullet = GetWorld()->SpawnActor<ABulletClass>(BulletAsset.LoadSynchronous());

のように記述すれば解決。
事前にロードした場合UPROPERTYのついた変数にキャッシュしないとGCが走ったときにNullになる可能性があるので注意が必要そう。

Editorだと一度でもBPを開いたりしているとloadしなくても動作するので再起動したときに気がついて困ったりする。