前回の続き(というより一部)
今回はGameplay Ability System (通称GAS)を使って「投げる」アクションを作っていきます。
お約束 | |
---|---|
この記事作成にあたって使用した主なUnreal Engine バージョン | UE4.27.2 |
本日のゴール
「投げるボタンを押している間予測パスが出てきて、ボタンを離す瞬間にボールが飛ぶ」を実装したい
実際の実装
まずは設定から。
基本的には何も考えずに、上記でOKです。Instancing Policyは〜 Per Executionではなく、Per Actorにしましょう。Per Executionにすると、Spawn Actorなどを実行したときにサーバーとクライアント側で二個アクターが生成されてしまいます。
もちろん例外もありますけど。
GA_Throw |
ってなんじゃこりゃですよね。はい。ザクッと紹介します。
まずは「Get Owing Actor from Actor Info」ノードです。これはよく使うノードで、実行中のGAを有するアクターを引っ張り出すことができます。でこれをCastして操作キャラのBPを取り出してます。(あまりCastは使いたくないですが)
続いて、先程のCastした操作キャラのBP使って、カメラを切り替えて投げるモードにします。投げるモーションの状態変数「Ready For Throw」を書き換えて投げるモーションモードにします。この変数は前回の通り、このキャラのAnim BPと連携しているので、この変数を書き換えるだけでモーションが自動的に変わります。
あ、でも他のクライアントでは勝手に実行はしませんので、「Ready For Throw」のReplicateはオンにしましょう。
GAは、Local Controlledされている操作プレイヤー + Authority権限のプレイヤーで実行される が原則です。(Local Predicted設定の場合)
これだけだとControllerが一致したままになってしまうので、
Controllerの向きをアクターの向きと一致させます。あとはWait Input Releaseで「投げるボタン」が離されるまで、予測パスをSpawnし続けるだけです。実際の実装ではGameplay Cueを使うと思いますが、とりあえずこれで。
参考:
で、GAが終了時に先程色々やったカメラの操作を逆にします。GAがキャンセルによって終了した場合以外、投げきるGAを実行します。(GAがキャンセルした=投げるのを途中でやめたということです。)
投げる方はそこまで難しくないです。座標を求めて雪玉をSpawnさせます。雪玉のSpawnはサーバー側だけでやればいいので、「Switch Has Authority」をつないでください。
投げるモーション(Animation Montage)を再生します。再生が終わるまではInputを無効にします。(正しい実装では、多分Characeter Movementを無効?)
※よく考えたらDisable Inputの前にはIs Locally Controlledを繋がないとだめですね。
最後にEnd Abilityにつないで終わりです。
0 件のコメント:
コメントを投稿