問題
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しなくても動作するので再起動したときに気がついて困ったりする。