始めに
2021年5月17~22日にかけて行われた「アンリアルクエスト」に参加していました。
その際に技術的に詰まったこと、そしてその解決先を忘備録として残しておきます。
その1:PhysicsをONにした物体からHitイベントが取れなかった
結論:「SimulationGeneratesHitEvents」をTRUEにするのを忘れていた。
物理演算(Physics)をONにした物体って、デフォルトではHitイベントは発行されないんですよね…
知ってる人からすれば「何を今さら当たり前のことを?」というレベルの話ですが…
最近は物理演算を使っていなかったのですっかり忘れてしまってました…
おかげで30分くらい無駄にしてしまいました(笑)
ちなみに、上記の件はHitイベントにカーソル合わせるとしっかり注意書きがあります。
こういう時に、日本語化しているのが裏目に出ますね。
やっぱりどこかのタイミングで英語版に戻そうかな…
その2:ビヘイビアツリーで敵キャラが移動してくれない
結論:「FinishExecute」ノードの「Success」チェックを入れ忘れていた
この間違い、本当に何回やるんだ…ってくらい間違えます。
油断するとついやってしまうんですよね…
今回は「索敵」⇒「移動」⇒「待機」という王道ビヘイビアツリーを設定していたのですが、「索敵」タスク(BTT_Search)のFinishExecuteで上記のミスをしてました。
Sequenceは「タスクが成功(Finishの結果がTRUE)したら次のタスクに遷移」するので、FinishExecuteの結果がFALSEだと「MoveTo」に遷移できず、延々と索敵タスクを繰り返してしまうんですよね。
その3:敵が弾を打ち出す位置がおかしい
結論:タスクのOwnerActorはAIControllerじゃい!
最初は下記のタスクを組んでましたが、これだと敵がいくら動いても「敵の初期位置」から弾が発射され続けます。
正しくはこっちですね。
BTTから見た場合は
OwnerActor:AIController(敵の初期位置にできるが、その後は動かない)
Controlled Pawn:実際の敵キャラクター
AIControllerから呼び出しているので、しっかりReceiveExecuteAIを使いましょう。
(ぶっちゃけ、ReceiveExecuteの使い道がよく分かってない…常にAIで良くない?)
追記:ツイッターで返信頂きましたが、やっぱり特に違いはないようです。
基本的にタスクはAI向け&ReceiveExecuteAIの方が機能が多彩なので、常にAIを使えばよいかと思います。
その4:ジップラインのメッシュをプロシージャルに作成できない
結論:勉強不足。動画見て勉強しましょう。(結論か?これ?)
でもまぁ、実際に知らないものは勉強するしかない。
下記の解説動画の「4:45:00」あたりから解説してもらえます。
<(1) 「アンリアルクエスト-グレイマンからの5つの挑戦状-」特別生放送!【前編】 - YouTube>
今回のアンリアルクエストで解説者の「しお」さんが作成されたプロジェクトを配布して頂けるようなので、それも参考にすると良さそうです。
※2021/05/23 時点では未配布?
終わりに
ほんとに俺、大丈夫?それなりにUE4触ってたよね?
…っていうのを思い知る5日間になりました。
そういう意味でも良い経験になったと思います。
今回上記で躓いた箇所は、今後は躓かない…あるいは、すぐに解決できるようにしたいですね!