フラッシュセールライセンス 30% オフ、同じ価格で増量トークンパック。ライセンス 30% オフ + 増量トークンパック終了まで …料金を見る → V2 の新機能を見る · 刷新されたインターフェース、Crew、Blueprint から C++ への変換、マルチプレイヤーのプレイテスト、エディター内アップデート 変更履歴を読む →
すべての記事
7 分で読めます

Unreal Engine のスプリントとスタミナ:AI でスタミナバーを作る

Unreal Engine でスタミナ付きスプリントを作る方法。Left Shift で速度 900 で走り、毎秒 25 減るバーが 1 秒後に回復し、空になるとロック。AI への 1 回の依頼で作成。

Unreal Engine のスタミナシステムは、3 つの小さな要素でできています。スタミナという 1 つの数値、いつ走れるか、走るのに何を消費するかを決めるルール、そしていつ回復するかを決めるルールです。バー、色、速度など、画面上のすべては、その 1 つの数値への反応にすぎません。いちばん簡単な作り方は、速度、消費、回復、ロックのルールを含むシステム全体を、1 回の依頼で AI に作らせることです。

このチュートリアルでは、Ultimate Engine CoPilot が、Left Shift で走り、消費して回復し、空になるとロックされるスタミナバー付きのスプリントを作ります。実際に使ったプロンプト、AI がキャラクターで見つけた問題とその解決方法、そしてスタミナシステムの仕組みのやさしい解説をお届けします。

完成したシステムの動き

歩いているあいだは、スタミナが満タンなので、バーは表示されません。Shift キーを押し続けるとキャラクターが速く走り、アビリティバーの上に小さなバーが現れます。走っているあいだバーは減り、残りわずかになるとオレンジ色に変わります。キーを離して 1 秒待つと、バーはまた満タンまで回復します。空になるまで走り続けると、バーが回復するまでスプリントはロックされます。

雪の上をスプリントするプレイヤーと、アビリティバーの上にある緑のスタミナバー

スプリント中:緑のスタミナバーがアビリティバーの上にあります。

プロンプト

これをコピーして、速度や消費量を変えながら、AI が何を作るか試してみてください。

Make sprinting with a stamina bar. Create WBP_StaminaBar in /Game/Series/EP39_Sprint, a thin horizontal bar at the bottom centre of the screen above the existing ability bar, 400 pixels wide and 14 pixels high, with a dark background and a green fill that turns orange below 30 percent, and hidden while stamina is full. Create BP_SprintController in the same folder, an actor that I place once in the level, that adds the widget on BeginPlay and listens for Left Shift. While Left Shift is held, the player is moving and stamina is above 0, set the character's MaxWalkSpeed to 900 and drain 25 stamina per second out of 100. When the player is not sprinting, wait 1 second and then regenerate 20 stamina per second. If stamina reaches 0, sprinting stays locked until stamina is back to 30. The actor must read and remember the original MaxWalkSpeed and restore it when the sprint ends. Keep the sprint speed, the drain, the regeneration and the lock threshold as variables. Place the actor near the player start. Then play test it: record the original walk speed, hold Left Shift while moving forward and check the speed is 900 and stamina falls, release and check the original speed is restored and stamina regenerates after the delay, hold until stamina is empty and check the sprint is locked, and fix anything that does not work.

数値に注目してください。900、25、20、30、そして 1 秒です。どのルールにも数値があるので、AI は何がちょうどよい手触りかを推測する必要がありません。もう 1 つ注目してほしいのは、アクターが元の速度を記憶して、それを復元しなければならないという点です。これを書かないと、多くのスプリントシステムでは、プレイヤーが間違った速度のままになってしまいます。

AI はどう作るのか

AI はまずプロジェクトを読み込みます。HUD を見つけてアビリティバーの位置を確認し、新しいバーをそれを隠さずに上へ置けるようにします。すると 2 つのアセットが現れます。スタミナバーのウィジェットと、スプリントコントローラーの Blueprint です。依頼で指定した数値は変数になるので、あとからグラフを触らずに変更できます。

バーは最初、左端に配置されたため、AI はアンカーを下部中央に直し、コントローラーをプレイヤースタートの近くに配置しました。

BP_SprintController のイベントグラフ

コントローラーのグラフ:毎フレーム、Shift キー、移動、スタミナを確認します。

キャラクターにあった問題

最初の実行では 11 項目が合格し、2 項目が失敗しました。AI は失敗の内容を読み取ります。速度は 900 になるはずなのに 600 のままで、スプリントがロックされているあいだの速度は 1000 を示していました。AI は原因を突き止めます。このキャラクターにはすでに独自のスプリントがあり、毎フレーム速度を 1000 に設定していたのです。実際のプロジェクトでは、こういうことがよくあります。AI はキャラクターに手を加えず、回避策を取りました。コントローラーが、プレイヤーコントローラーのあと、移動の前に、毎フレーム自分の速度を書き込むようになったのです。

2 回目の実行では、19 項目のチェックがすべて通りました。

レポート

速度、消費、回復、ロックのチェックを並べた AI のレポートの表

各ルールの根拠と、キャラクター独自のスプリントに関する注意点。

レポートには、すべてのチェックとその根拠をまとめた表があります。

  • 歩行速度は 600 です。スプリント中の速度は 900 で、実際のポーンの速度は 899.98 です。
  • 1.5 秒スプリントしたあとのスタミナは 61.5 で、数値から予測される 62.5 に近い値です。
  • キーを離すと、速度は 600 に戻ります。最初の 1 秒は回復せず、そのあと回復が始まります。
  • 空になるまで押し続けると、スプリントはロックされます。スタミナが 13.9 の時点で Shift をまだ押していても、速度は 600 です。ロックはスタミナが 30.8 で解除され、スプリントが 900 で再開します。

AI は、確認できなかったことについても正直です。オレンジ色のバーは画面で確認しましたが、緑のバーと非表示の状態は、ウィジェットのグラフからしか確認していません。また、このキャラクターはアセットパック由来のため、キャラクターのスプリントは削除されず、上書きされています。ご希望なら削除する、とも提案しています。レベルも未保存です。

スタミナシステムのしくみをやさしく解説

コントローラーは毎フレーム、3 つのことを確認します。Shift キーが押されているか、プレイヤーが動いているか、スタミナが 0 より大きくロックされていないか、です。3 つすべてが「はい」なら、速度はスプリント速度になり、スタミナは少しだけ減ります。減る量は、消費量にフレーム時間を掛けたものです。そうでなければ、速度は記憶しておいた元の速度に戻ります。タイマーが 1 秒を数え、そのあと、毎フレーム少しずつスタミナが増えます。

スタミナが 0 になると、locked というフラグが 1 つ立ち、スタミナが 30 に戻るまで解除されません。この差があるおかげで、スプリントがついたり消えたりしてちらつくのを防げます。バーは、その数値を読むだけです。緑で、30 パーセントを下回るとオレンジになります。速度、消費量、回復量は変数なので、3 つの数値を変えるだけで、息切れしやすいランナーにも、疲れ知らずのランナーにもできます。

拡張のアイデア

  • ジャンプには別の消費量を設定する。
  • バーが空になったときの短い疲れた声と、荒くなる息づかい。
  • スプリント中に少し広がる視野角。視野角のブレンドについては、Unreal Engine ズーム をご覧ください。

スタミナプロンプトの 4 つのコツ

  1. すべてのルールに数値を与える。速度、消費、遅延、ロック。
  2. 既存の UI に対して、バーをどこに置くかを書く。
  3. 元の速度を復元するよう AI に頼む。
  4. 満タンの場合だけでなく、空の場合もテストするよう頼む。

よくある質問

Unreal Engine 5 でスタミナ付きのスプリントを作るにはどうすればよいですか?

キーが押され、プレイヤーが動いているあいだ、MaxWalkSpeed を高く設定し、毎フレームスタミナを減らします。一定の遅延のあとで回復させ、0 になったらスタミナがしきい値まで回復するまでスプリントをロックします。

スプリントが、スタミナが 30 に戻るまでロックされるのはなぜですか?

空になる値とロックが解除される値のあいだに差を設けると、スタミナが 0 付近を行き来したときに、スプリントがついたり消えたりしてちらつくのを防げます。

最初の実行で 2 項目が失敗したのはなぜですか?

キャラクターにすでに独自のスプリントがあり、毎フレーム速度を 1000 に設定していたからです。AI は、キャラクターを編集せずに、正しい順序で毎フレーム自分の速度を書き込むことで回避しました。

プロジェクトで試してみましょう

Ultimate Engine CoPilot で何が作れるかは 製品ページ でご覧いただけます。入手は Fab からどうぞ。AI Blueprint ジェネレーター のしくみもご覧ください。

このシリーズの他の作例: Unreal Engine 氷の床、Unreal Engine スピードブースト、Unreal Engine 落下ダメージ。

どう思いましたか?

エディタで試してみよう
Unreal Engine 5 向けの 1,655 のツール。
プラグインを入手