パッケージ化したプロジェクトを実行すると、SpawnActorfromClassの処理を行っている箇所でクラッシュしてしまいます。
エディタのプレイインではクラッシュせず処理が実行されます。
パッケージ化のビルドでエラーは出ていません。
座標の指定方法(下図GetWorldLocationの部分)を色々変えてみたのですが、結果は変わらずクラッシュしてしまいます。
原因が分からなくて困っています。解決方法などがあればご教授頂けると助かります。
よろしくお願いします。
見たところ SpawnActorFromClass
に関しては特に怪しいところがありません
エラー内容と処理の全体像がわからないのでいつのタイミングの処理かわかりませんが、Spawnそのものではなくその前の GetAllActorsOfClass
から0番目を取っているところの処理が原因ではないですか?
もし指定のClassがない場合、配列は空になるので0番目を取ろうとするとエラーになります
もしこの処理がBeginPlayあたりで行われている場合、PlayInEditorとRuntimeでの動作の違いを認識する必要があります
PIEではLevel上に置かれているActorが既にロードされた状態から始まるため、どのActorのBeginPlayでも互いを認識することが可能ですが、Runtimeではロード完了したActorから順次BeginPlayが実行されるため、ロード順が前後すると目的のActorを参照できない場合があります
全体を書き忘れてましたすいません。
下図の通り、Overlapイベントから実行される処理となります。
試しにGetAllActorsOfClass を含む変数の処理を除外して組んでみたのですが、やはりSpawnActorのあたりでクラッシュしてしまうようです。(相変わらずPIEでは動きます)
alt text
処理を見てまず不安なところがあるんですが…
Delayを挟むのはいいんですが、一番最初にBranchでフラグチェックして、フラグが立っていれば 自分をDestroy してますよね
このノード構成ならBeginOverlapは何度でも入ってくるので、Delay中に自分がDestroyされると、その後の処理が成り立たなくなると思います
仕様がわからないので予測ですが、おそらくこの問題は単純なコーディングミスでは?と捉えています
(他の部分ではOtherActorをDestroyしているので)
ご回答ありがとうございます。
試しに、下記のように処理を繋ぎなおして試してみたのですが、overlapから5秒後にクラッシュしてしまうようです……。
ちなみに、実装したい仕様はざっくり以下のとおりです。
- List item
環境はOculusRift - List item
レベル上には、Boxコリジョン(このノードが書かれたBP)とBP_NaTKT01(プレイヤーが掴めるオブジェクト)というアクターが存在している。 - List item
BP_NaTKT01はスポナーから一定時間ごとにスポーンされ、レベル上でどんどん増えていく。 - List item
プレイヤーは、BP_NaTKT01を掴んでBoxコリジョンに投げ込む。 - List item
Boxコリジョンに既に他のBP_NaTKT01が入っていた場合、BP_NaTKT01は消滅する。 - List item
入っていなかった場合、BP_NaTKT01の属性を判定し、Panko属性ではなかった場合はBP_NaTKT01は消滅する。 - List item
Panko属性だった場合、変数RandomTime(3~6の値が入ります)の時間分Delayが走る。 - List item
Delayが終わると、Audio1を再生しArrowコンポーネントからBP_TKTProcをスポーンさせる。
補足です。
他のアクターを対象にしたところ問題なくスポーンされたので、どうやらスポーンされる側のアクターに問題があるようです。
自分の検証不足でした、スイマセン…。
スポーンされる側のアクターの中身は下記画像のようになっています。
やりたい事は以下の2つです。
ProceduralMeshが生成されて、スポーン地点からプロジェクタイルで発射されるようにしたい。
生成から5秒経過したら消滅させたい
ちなみに、スライスの処理はプレイヤーコントローラー側に処理があり、以下のように書いています。
引き続き色々試してみます…
すいません、ご回答ありがとうございます。
返信したつもりだったのですが、AnswerHubの調子が悪いのか何度書いても反映されてないみたいで…。
確証はないのですが、ConstructionScriptの実行タイミングではStaticMeshがロードされている保証がないはずですので、CopyMeshのような他Componentの内容に依存するような処理はうまく動かなかったはずと記憶しています
これはConstructionScript内でSkeletalMeshのBoneTransformを参照する際にも同様の問題が起きたはずです
ですので、ロードされるデータに依存するような処理は、なるべくAssetのロード完了後…BeginPlay以降で実施すべきかと思います
ConstructionScriptは他のActorやComponentに依存するような処理を書かないことをおすすめします