FPS(フレームレート)の変更方法!

キャラクターBPとレベルBP

どっちでもいいので、

イベントグラフに
以下のような処理を組みます。

f:id:Free_Gamer:20190506230208p:plain

「1」キー・・・「30FPS」に変更

「2」キー・・・「60FPS」に変更

「3」キー・・・「120FPS」に変更

「4」キー・・・「FPSを無制限」に変更

 

コンソールコマンドを使って
FPSを変更しています。

 

使用するコマンドは、

「t.MaxFPS 〇〇」


です。

 

〇〇の部分に、
設定したいフレームレート値を入れます。

60FPSなら、「t.MaxFPS 60」です。

 

FPSとフレームレート値の間は、
必ずスペースを空けましょう。

じゃないと、動作しません。

 

×→「t.MaxFPS60」

〇→「t.MaxFPS 60」

 

動作確認をしましょう。

 

FPSをリアルタイムで見るには、

ビューポート左上の「▼」をクリック。

FPSを表示」を選択しましょう。

f:id:Free_Gamer:20190506231434p:plain

ビューポート右上に、FPSが表示されます。

f:id:Free_Gamer:20190506231627p:plain



プレイして確認です。

各キーを押して、
しっかりとFPSが変更されていれば成功です。

 

 

それではまた!^^ノシ 

 

 

 

 

 

PhysicsAnimationコンポーネントで、酔っぱらいを作ってみようか!

↓今回は、酔っぱらいのおっさんみたいな「ふにゃふにゃ人間」を作っていきます!

f:id:Free_Gamer:20190506195247p:plain

 

そのためには・・・

 

PhysicsAnimationコンポーネント

 

を使います!

 

PhysicsAnimationコンポーネントを使えば、

物理シュミレーションベースのアニメーションをさせることが出来ます!

 

言葉ではあまりピンと来ないと思うので、

実際にやってみましょう!

 

↓キャラクターBPに処理を組んでいきます!

~キャラクターBP~

f:id:Free_Gamer:20190503022509p:plain

コンポーネント

PhysicsAnimationコンポーネントを追加

f:id:Free_Gamer:20190506194714p:plain

↓追加されると、以下の画像のようになります。

f:id:Free_Gamer:20190506200527p:plain

CapsuleComponentのCapsuleRadiusの値を「21」にします。

f:id:Free_Gamer:20190506201613p:plain

絶対に「21」でないとダメという事はありません。

キャラクターの両腕がCapsuleComponentからはみ出ていればいいです。

f:id:Free_Gamer:20190506201837p:plain


変数

f:id:Free_Gamer:20190506200651p:plain

BoneName・・・物理シュミレーションを適用したいボーン名を入れる変数。

        とりあえずデフォルト値は「Spine_01」

OrientationStrength・・・デフォルト値「1000」

AngularVelocityStrength・・・デフォルト値「100」

 

コリジョン

Meshコンポーネント「CollisionEnabled」

「PhysicsOnly(NoQueryCollision)」にします。

物理シュミレーション時に、コリジョンを有効にするという感じです。

「CollisionEnabled(Query and Physics)」でも可能です。

f:id:Free_Gamer:20190506201233p:plain

 

イベントグラフ

f:id:Free_Gamer:20190506200721p:plain

プレイ開始時、MeshにPhysicsAnimationコンポーネントを適用

f:id:Free_Gamer:20190506200950p:plain

指定したボーン(BoneName)に、PhysicsAnimationコンポーネントのパラメーターを適用。

指定したボーンの物理シュミレーションを適用。

f:id:Free_Gamer:20190506201036p:plain

 

これで完了です!

 

これでプレイしてみると・・・

youtu.be

上の動画のように

 

非常にだらしない人間になったとおもいます!(笑)

 

壁にぶつかったり、ジャンプしたりすると、体が面白い感じでねじ曲がったり、振り回されたりするので、動かしているだけでも非常に面白いですね。

 

OrientationStrength

AngularVelocityStrength

の値を変えてみて、挙動の変化を楽しんでみてください!

 

それではまた!^^ノシ

 

PredictProjectilePathByTraceChannelを使って、グレネードもどきを投げてみよう!

かなりのお久です。

もう僕の存在なんて忘れてしまったのではないでしょうか??(笑)

そもそも、端(はな)から僕の存在を知っている人がいるかどうかも疑問です(笑)

 

さて、自虐的な前座はここまで!本題に入りましょう!

 

↓今回やりたいことはこれ!!

f:id:Free_Gamer:20190503021749j:plain

(画像はTheLastOfUsというゲームのものです)

 

軌道に沿って、物を投げる方法!!

 

です!

 

youtu.be

 

キャラクターBPと投擲物(投げる物)のBPに処理を組んでいきます!

 

~キャラクターBP~

f:id:Free_Gamer:20190503022509p:plain

コンポーネント

Sceneコンポーネントを追加します。

f:id:Free_Gamer:20190503022717p:plain

↓キャラの腹あたりの位置に置きましょう。

f:id:Free_Gamer:20190503022743p:plain

このSceneコンポーネント

物を投げ始めるときの位置です。

 

変数

f:id:Free_Gamer:20190503024607p:plain

VelocityVector・・・デフォルト値「X:1000」「Z:1000」で。

 

イベントグラフ

↓最終的な完成図です

f:id:Free_Gamer:20190503023112p:plain

 

物を投げるモードの切り替え

f:id:Free_Gamer:20190503023250p:plain

 

軌道計算

ゲーム製作上、Tickはなるべく使わない方がいいのですが(処理負荷的に)

今回はそのような考慮は除いています。

物を投げるモードがONの時、軌道計算を行います。

f:id:Free_Gamer:20190503023402p:plain

物を投げる時の方向・速度を計算

f:id:Free_Gamer:20190503023613p:plain

軌道計算

PredictProjectilePathByTraceChannelというノードは

指定した位置(StartPos)から指定した速度(LaunchVelocity)で投げた時の軌道を計算してくれます。

f:id:Free_Gamer:20190503023902p:plain

 

PredictProjectilePathByTraceChannelの

各項目についてサラッと解説

f:id:Free_Gamer:20190503025835p:plain

StartPos・・・スタート位置

LaunchVelocity・・・投擲速度

TracePath・・・トレースが何かにヒットした時

        トレースを貫通させないか(True)

        トレースを貫通させるか(False)

ProjectileRadius・・・トレースの球体半径

TraceChannel・・・コリジョンチャンネル

TraceComplex・・・知らん

Actors to Ignore・・・知ってるようで知らん。結局知らん

DrawDebugType・・・トレースの描画方式

DrawDebugTime・・・トレースの描画時間

SimFrequency・・・トレースの球体個数。例)「5」→球体が5個描画される

MaxSimTime・・・トレースの描画距離。値が大きい程トレースの描画距離が延びる。

OverrideGravityZ・・・重力。値が大きいほど、トレースは上に反って描画される。

 

ざっとこんなもんです。完全に己の勘です。どっか間違ってるかもw

まあよくわかんなかったら試してみてください(笑)

 

物を投げる

物を投げるモードONの時、投擲可能

f:id:Free_Gamer:20190503024119p:plain

Sceneコンポーネントの位置から物を投げる

f:id:Free_Gamer:20190503024222p:plain

物を投げる時の速度を設定

f:id:Free_Gamer:20190503024259p:plain

VelocityVectorの

「X」の値は、大きい程、遠くまで飛びます。

「Z」の値は、大きい程、高く飛びます。

 

ただ、「Z」の値があまりにも大きいと前に物を投げたいのに、

後ろに投げてしまう現象が起きますw

色々試して、ちょうどいい値を探ってみて下さい(適当)

 

 

~投擲物BP~

コンポーネント

f:id:Free_Gamer:20190503024845p:plain

↓Granade・・・スフィアコンポーネントにしました。

f:id:Free_Gamer:20190503025154p:plain

スフィアのサイズは、軌道に沿ってるか確認したい為、小さめにしてます。

f:id:Free_Gamer:20190503025538p:plain

↓スフィアコンポーネントコリジョン設定

f:id:Free_Gamer:20190503025627p:plain

ProjectileMovementは特に何も設定しません。

f:id:Free_Gamer:20190503025502p:plain

 

これで完了です!

先に挙げた動画のようになると思います!

 

ちなみに・・・

 

PredictProjectilePathByTraceChannelの

SimFrequencyの値は、「1」以上じゃないと、軌道通りに物が飛んでくれません。

実際試してみると分かるのですが、投げたものが軌道からズレていくと思います。

なので、SimFrequencyに入れる値は「2」以上が良いでしょう。

 

それではまた!^^ノシ

飛ばした矢の突き刺し方!

飛ばした矢やダーツのような発射物を
ヒットした位置に突き刺す方法
です。

きっとダーツゲームや弓矢ゲーム

あるいは、人殺しダーツゲームや人殺し弓矢ゲームできっと役に立つでしょう。(^^)

 

↓以下のようなことが出来ます!

youtu.be

 

※ファーストパーソンテンプレートを使用してます

 

 

~矢の作成~

↓「Arrow(矢)」という名のActorを作成しました。

f:id:Free_Gamer:20190402231428p:plain

f:id:Free_Gamer:20190403005044p:plain

コンポーネント

f:id:Free_Gamer:20190402233746p:plain

CollisionComponent・・・当たり判定を取るためのコンポーネント

Arrow・・・飛ばすもの(矢とかダーツとか)

Projectile・・・物を飛ばすためのコンポーネント

 

↓CollisionComponentは、矢のちょうど真ん中あたりに来るようにしている。

f:id:Free_Gamer:20190403010227p:plain



↓CollisionComponentのコリジョン設定

f:id:Free_Gamer:20190402233639p:plain

↓Arrowのコリジョン設定

f:id:Free_Gamer:20190402235633p:plain

 

 

~矢を飛ばした時に、弧を描きながら飛ばす方法~

Projectileコンポーネントの詳細パネルにある「Projectile項目」にある

「RotationFollowVelocity」にチェックをつけます。

f:id:Free_Gamer:20190403000158p:plain

「RotationFollowVelocity」にチェックをつけた場合と、つけていない場合を見比べてみましょう。↓

 

RotationFollowVelocity「ON」

youtu.be

RotationFollowVelocity「OFF」

youtu.be

一目瞭然ですよね。

RotationFollowVelocityを「ON」にしている方が、いかにも矢という感じがしていいですよね。

 

 

~矢がヒットした位置に、矢を突き刺す~

↓「Arrow」のイベントグラフ

f:id:Free_Gamer:20190403001549p:plain

矢のヒットした位置に、「StaticArrow」という
「何かに突き刺さった用の矢」をスポーンしています。

それでは、「StaticArrow(何かに突き刺さった用の矢)」を作成しましょう。

 

「StaticArrow」

f:id:Free_Gamer:20190403002312p:plain

f:id:Free_Gamer:20190403010251p:plain

コンポーネント

f:id:Free_Gamer:20190403002532p:plain

Scene・・・Arrowの位置を自由に変更できるようにする為に親として置いているだけ

Arrow・・・何かに突き刺さった用の矢。飛ばす用の矢「Arrow」と同じメッシュを使用

 

ちなみに、飛ばす矢である「Arrow」の位置と突き刺さった時用の矢「StaticArrow」の位置は、同じにしましょう。

 

例えば、「Arrow」の位置が「X:-50」なら

「StaticArrow」の位置も「X:-50」にする。

 

↓Arrowのコリジョン設定

f:id:Free_Gamer:20190403003141p:plain

 

あとは、作成した矢「Arrow」を飛ばすだけです。

 

~実際に矢を飛ばそう!~

ファーストパーソンテンプレートにデフォルトで備わってる以下のBPを開きましょう。↓

f:id:Free_Gamer:20190403004154p:plain

イベントグラフ

f:id:Free_Gamer:20190403004313p:plain

↓Arrowをスポーンさせます

f:id:Free_Gamer:20190403004341p:plain

 

これで完了です。

あとは、Projectileの発射速度をいじって、色々遊んでみてください^^

 

それではまた!^^ノシ

 

SpawnDecalAtLocationで、デカールがスポーンされなかった時の話。そしてその原因

つい最近、暇つぶしに自己満足人殺しゲーを作ってた時にあった話です。

まだSpawnDecalAtLocationを使ったことないような人は、多分つまづきそうなポイントなので書きますね。

 

人殺しゲーと言うぐらいですから、当然血はつきものです。

なので人を殺した時に、殺された人の場所に血のデカールをスポーンさせようとしました。

こんな感じで↓

f:id:Free_Gamer:20190327071931p:plain

 

デカールをスポーンさせたいとき、「SpawnDecalAtLocation」を使いますよね。

f:id:Free_Gamer:20190327072040p:plain

 

なので、このような処理で血のデカールをスポーンさせようとしました。↓

f:id:Free_Gamer:20190327072853p:plain

SpawnDecalAtLocationのSpawnSizeの「XYZ」はすべて「1」にしました。

デフォルトサイズで表示させたかったので。

f:id:Free_Gamer:20190327072919p:plain

 

これでやってみると・・・

f:id:Free_Gamer:20190327073215p:plain

はい。スポーンされません。

 

Before

f:id:Free_Gamer:20190327071931p:plain

After

f:id:Free_Gamer:20190327073215p:plain

一目瞭然ですよね。

 

原因は何かというと・・・

このDecalSizeの値です!↓

f:id:Free_Gamer:20190327072919p:plain

 

僕は、「拡大・縮小」の部分の数値を入れればいいと思い、「XYZ」すべてを「1」にしました。

f:id:Free_Gamer:20190327073552p:plain

 

ですが、本当に入れるべき値は・・・

f:id:Free_Gamer:20190327073824p:plain

DecalSizeの部分の値なのです。

 

Decalのデフォルトサイズは
「X:128」「Y:256」「Z:256」です。

 

なので、この値を入れてやれば・・・↓

f:id:Free_Gamer:20190327074053p:plain

 

はい!望んでた通り、デフォルトサイズでデカールが表示されます!↓

f:id:Free_Gamer:20190327071931p:plain

 

最初は、表示されないのがバグだと思ってましたが、そんなことはなかったですww

これからSpawnDecalAtLocationを使ってみようかなーと思ってる方はぜひご一読を!

 

それではまた!^^ノシ

 

左スティックの倒し具合で、歩行・走行を切り替える方法!

皆さんは、

左スティックが

どれだけ倒されたかによって、

移動状態(歩行・走行)を切り替えたいッッッ・・・!

 

と思ったことはないでしょうか??(俺はありますよ??)

 

今回はそんな悩みを抱えた人たちの役に立つかもしれない記事を書きました。

 

やりたいことをそれなりに分かりやすく図にしました。↓

左スティックを上から見た感じの図ですね。

f:id:Free_Gamer:20190216224550p:plain

左スティックを何も倒していない時、Idle(図だと赤の部分の事)
左スティックを少し倒した状態~全開の手前まで倒していれば、Walk(図だと黄色の部分の事
左スティックを全開の手前~全開まで倒していれば、Run(図だと緑の部分の事)


これを実現するための方法を教えます。

 

※サードパーソンテンプレートを使用します。

 

ThirdPersonCharacterBPを開きましょう。

f:id:Free_Gamer:20190216231931p:plain

 

変数

f:id:Free_Gamer:20190216231629p:plain

MovementChangeValue・・・デフォルト値「0.9」 左スティックがこの値を超えた時に歩行状態(歩行・走行)を切り替える

ForwardAxis・・・Axis値

RightAxis・・・Axis値

F-Axis・・・画像の説明の通り

R-Axis・・・画像の説明の通り

 

イベントグラフ

f:id:Free_Gamer:20190216225142p:plain

 

f:id:Free_Gamer:20190216225341p:plain

左スティックがどれだけ倒されているかを
「CalsulateAnalogStickAxisValue」純粋関数で計算します。

自作関数ですね。

f:id:Free_Gamer:20190216225508p:plain

「CalsulateAnalogStickAxisValue」の中身↓

F-Axis・・・左スティックが前、あるいは後ろにどれだけ倒されているかの値

R-Axis・・・左スティックが左、あるいは右にどれだけ倒されているかの値

f:id:Free_Gamer:20190216225638p:plain

 

「GetForward/RightVector」マクロ

f:id:Free_Gamer:20190216225944p:plain

ただ単に見た目をコンパクトにする為だけにマクロにしてるだけですw

「GetForward/RightVector」の中身↓

f:id:Free_Gamer:20190216230028p:plain

 

 

f:id:Free_Gamer:20190216230203p:plain

「MaxInput??」という純粋関数で左スティックがどれだけ倒されているかを判定します。
自作関数です。

f:id:Free_Gamer:20190216230844p:plain

「MaxInput??」の中身↓

f:id:Free_Gamer:20190216230947p:plain

MovementChangeValueというのは、

 

左スティックがどれだけ倒されたかによって
移動状態(歩行、走行)を変える値の事です。

 

例えば、MovementChangeValueのデフォルト値を「0.5」にした場合。

 

左スティックを半分(0.5)以下の量まで倒していれば歩行

左スティックを半分(0.5)以上の量まで倒していれば走行

 

という事になります。

 

歩行時はMaxWalkSpeed・MinAnalogWalkSpeed「200」
走行時はMaxWalkSpeed・MinAnalogWalkSpeed「600」

f:id:Free_Gamer:20190216232346p:plain

さて、さりげなく出てきた

 

MinAnalogWalkSpeed

 

とは何なのか??

 

MinAnalogWalkSpeedとは、

 

左スティックが倒された時の最小歩行速度

 

の事です。

 

例えば、MinAnalogWalkSpeedの値を「100」に設定した場合

 

左スティックを倒し始めた時の最小歩行速度は「100」になります。

 

そこから更に左スティックを倒すと、速度はMaxWalkSpeedの値まで到達しようとします。

 

MinAnalogWalkSpeedの値の設定は、CharacterMovementの詳細パネルで出来ます。

f:id:Free_Gamer:20190217000051p:plain

 

さて、実際にやってみましょう!

 

youtu.be

 

まあ、映像じゃさっぱり分からないですよねww

 

でも実際にやってみればわかります。

 

左スティックを全開まで倒せば走行

それ以外は全部歩行になるはずです。

 

それではまた!^^ノシ

 

 

 

 

 

 

 

ダッシュ中のスタミナの減少・増加方法!

かなりのお久しぶりです。

ちゃんと生きていました。

と言ってもこれだけ更新期間が無ければ、こんなこと言ったところでもうほぼほぼ誰も見ていないと思いますがw

でもこの記事が、今後迷えるUE4ユーザーさんの助けになれば幸いです。

そしてもし頭のいい人がいるなら、僕の教えたやり方を更により良くしてくれても構いません。

さて、長ったらしい前置きはお終い。本題に入りましょう!

 

今回やりたい事

・Shiftキーを押していて、移動中であればダッシュ。キャラのスピードが増加。
 Shiftキーを放す、あるいはShiftキーを押したまま移動をやめたらダッシュ解除。

 通常速度に戻る。

ダッシュ中はスタミナ減少。スタミナが「0」になると、ダッシュ不可。通常速度に戻る。

・スタミナが一定値まで回復するまでは何度Shiftキーを押してもダッシュは不可。

 スタミナが一定値まで回復すればダッシュ可能。

・スタミナが減る条件↓

 ・地面にいること

 ・ダッシュ中であること

 ・スタミナが「0」以上であること

 

 

それではやっていきましょう。

 

 

使うのはサードパーソンテンプレート。キャラクターBPを開きましょう。

f:id:Free_Gamer:20190210130802p:plain

イベントグラフはこんな感じです。

f:id:Free_Gamer:20190210150436p:plain
変数は以下の通り。

f:id:Free_Gamer:20190210131558p:plain

CurrentStamina・・・デフォルト値「100」

SprintSpeed・・・デフォルト値「1200」

MaxStamina・・・デフォルト値「100」

DashResumableValue・・・デフォルト値「30」

DecreaseStaminaRate・・・デフォルト値「0.5」

IncreaseStaminaRate・・・デフォルト値「0.1」

Sprint・・・ダッシュキーが押されたかどうかのBool値。デフォルト値「False」

MyUMG・・・UMGの参照変数

DecreaseStaminaTimer・・・スタミナを減少させるためのタイマー変数。Tickの代わり。

IncreaseStaminaTimer・・・スタミナを増加させるためのタイマー変数。Tickの代わり。

 

まず、ゲーム開始時スタミナゲージを表示するためのUMGを表示。

その後、スタミナ値をインターフェースでUMGに渡します。

f:id:Free_Gamer:20190210150711p:plain

 

キーが押されているかを取得

押しているときは、True
押していないときは、False

f:id:Free_Gamer:20190210133428p:plain

さて、冒頭で述べたように

 

Shiftキーを押していて、移動してればダッシュ

 

と言いました。

 

つまり、移動中「Shiftキーを長押し」していればダッシュ可能という事。

 

ですが生憎、このインプットアクションキーというのは、

 

キーが押された瞬間・キーが放された瞬間しか処理が流れないのです。

では、どうやってキーを押している間処理を走らせるのか??

 

以下のマクロを使用しましょう!

f:id:Free_Gamer:20190210133337p:plain

これは自作マクロです。中身は以下の通り。

キーを押している間は、このマクロ内をひたすらループし、ひたすら処理を流します。

Sprintキーが放されたらループ解除です。

Delayを挟まないと、「おい無限ループしてんぞ!?」みたいな感じでUE4側からお怒りのエラーメッセージが来ますw

f:id:Free_Gamer:20190210133943p:plain

では、実際にダッシュが可能かどうかを判定する処理「SprintCheckGraph」の中身を見てみましょう。

f:id:Free_Gamer:20190210134328p:plain

 

SprintCheckGraphの中身は以下通り。

f:id:Free_Gamer:20190210134732p:plain

 

まず、ダッシュ可能かどうかの判定

f:id:Free_Gamer:20190210134842p:plain

CanSprintというノードは、純粋化(ピュア化)した自作関数です。

中身はこんな感じ。

f:id:Free_Gamer:20190210135045p:plain

 

ダッシュ可能(True)の場合、まずスタミナ値が一定値を超しているかの判定を行います。

f:id:Free_Gamer:20190210135432p:plain

これは冒頭で述べた

 

スタミナが一定値まで回復するまでは何度Shiftキーを押してもダッシュは不可。

 

という仕様を実現させるためです。

 

DashResumableImmediately??というノードも、純粋化した自作関数です。

中身↓

f:id:Free_Gamer:20190210135602p:plain

ダッシュ可能で、現在のスタミナが一定値を超していればダッシュ可能。

 

タイマー処理でダッシュ処理・スタミナ増減処理を行います。

「0.01」のレートでタイマーをループさせてます。Tickの代わりですね。

f:id:Free_Gamer:20190210135856p:plain

TimerノードのFunctionNameには以下のように名前を入れましょう。

この名前は、自分で作ったカスタムイベント名の事です。

この後出てきます。

f:id:Free_Gamer:20190210140215p:plain


SprintCheckGraphは以上です。

 

次は、「SprintSystem」の中身を見ていきましょう。

f:id:Free_Gamer:20190210140443p:plain

中身↓

f:id:Free_Gamer:20190210140546p:plain

 

まず、スタミナ減少処理から見ていきましょう。

 

スタミナ減少処理↓

 

f:id:Free_Gamer:20190210140638p:plain

DecreaseStaminaイベントがTimerノードから呼び出された時、スタミナの減少処理を「CalculateDecreaseStaminaAmount」関数で行います。

これも自作関数です。

 

CalculateDecreaseStaminaAmount関数の中身↓

現在のスタミナをDecreaseStaminaRateの値分減算していきます。

f:id:Free_Gamer:20190210141033p:plain

 

現在のスタミナが「0」かを判定

f:id:Free_Gamer:20190210141250p:plain

 

False・・・スタミナが「0」じゃない場合↓

f:id:Free_Gamer:20190210141345p:plain

現在のスタミナを、スタミナ上限値「MaxStamina」で割り、「1~0」の値にします。

これは、UMGでプログレスバーを使ってスタミナゲージの表示を行うので、割り算をし「1~0」の値に変えているわけです。

プログレスバーは「1~0」の値しか受け付けないので。

割り算した値を、インターフェースでUMGに渡します。

その後、SprintSpeedの値をMaxWalkSpeedにセット。

 

True・・・スタミナが「0」だった場合↓

スタミナ減少処理のタイマーノードを停止。

その後、スタミナ増加処理のタイマーノードを呼び出します。

f:id:Free_Gamer:20190210142329p:plain

 

スタミナ増加処理↓

f:id:Free_Gamer:20190210143148p:plain

IncreaseStaminaイベントがTimerノードから呼び出された時、スタミナの増加処理を「CalculateIncreaseStaminaAmount」関数で行います。

自作関数です。

 

CalculateIncreaseStaminaAmount関数の中身↓

現在のスタミナにIncreaseStaminaRateの値分加算していきます。

スタミナ値が上限値を超えないよう、Clampで範囲を設けています。

f:id:Free_Gamer:20190210143314p:plain

 

スタミナ値が一定値を超しているかを判定。

f:id:Free_Gamer:20190210143603p:plain

 

False・・・スタミナ値が一定値に達していない場合↓

f:id:Free_Gamer:20190210143959p:plain

↑スタミナ値(CurrentStamina)がスタミナ上限値と同じかどうかを判定。

 

上限値と同等じゃない場合は、スタミナ値をスタミナ上限値で割った値をインターフェースでUMGに渡す。

上限値と同等の場合、スタミナ増加処理のタイマーノードを停止。

f:id:Free_Gamer:20190210144448p:plain

 

True・・・スタミナ値が一定値を超している場合↓

f:id:Free_Gamer:20190210144644p:plain

スタミナ増加処理のタイマーノードを停止。スタミナ減少処理のタイマーノードを呼び出す。

 

キャラクターBPは以上になります。

 

 

あとは、スタミナ値を表示するためのUMGを作成しましょう!

「MyUMG」という名前で作成しました。

f:id:Free_Gamer:20190210150915p:plain

 

プログレスバーを左上に設置しただけです。

f:id:Free_Gamer:20190210151023p:plain

 

UMGのイベントグラフです。↓

f:id:Free_Gamer:20190210151254p:plain

 

これですべて完了です!

 

実際にやってみましょう!

www.youtube.com

 

しっかり速度が変化してるか分かりやすくする為に、周りに柱を何本か置きました。

分かりやすければいいのですがw

 

あとは実際にやって色々確かめてみてください!

 

それではまた!^^ノシ