カウントダウンの実装方法~後編~最後にアドバイスがあるよ!

どーも!Free_Gamerです!

今回は前回の続き・・・

 

カウントダウンの実装方法~後編~

 

を始めていきたいと思います!

 

前回は、

f:id:Free_Gamer:20180513234518p:plain

とりあえずカウントダウン処理を実装することはできました。

ですが・・・


ブログ用 UE4 Timerカウントダウン

動画(画面の左上)を見てもらえると分かる通り、カウントが「0」になっても、「0」以下まで下がり、「-1」「-2」・・・と下がっていってしまいましたね。

今回はカウントが「0」になったらそこできっちりカウントダウンを止める処理を実装していきたいと思います!

 

前回のカウントダウン処理のBPを開いてください!

レベルBPにありましたよね。

f:id:Free_Gamer:20180513234518p:plain

これですね!

今回はこれにちょっと改良を加えます!

 

加えるもの!

・Branch

・Integer変数

・<か≦

 

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

まずInteger変数を作ります!理由はカウントダウン終了時に使いたい重要なものだからです!

レベルBPの画面左側の変数の項目にある「+変数」ボタンをクリックし、Integer型の変数を作ります!

f:id:Free_Gamer:20180514191810p:plain

f:id:Free_Gamer:20180514191836p:plain

次に、作った変数の名前を決めましょう!

カウントダウン終了時に使いたいので、「FinishCount」とでもしておきましょうか!わかりやすいですね!多分!

f:id:Free_Gamer:20180514191907p:plain

さて!一度コンパイルして、ここでInteger型の変数を作ることは終わりました!デフォルト値は「0」のままで!

次に、Branchノードを出しましょう!

f:id:Free_Gamer:20180514192138p:plain

Branchノードは、Condition(条件)によって「True」か「False」どちらかの処理を流すノードです!

このノードはよく使います!覚えておきましょう!

このBranchを、Timer変数PrintStringの間に挟みましょう!

f:id:Free_Gamer:20180514192319p:plain

画像のように出来ましたか??

次に、FinishCount変数をセットし、BranchのTrueとつなぎましょう!

f:id:Free_Gamer:20180514192926p:plain

f:id:Free_Gamer:20180514192941p:plain

f:id:Free_Gamer:20180514192608p:plain

出来ましたか??

次に、PrintStringをもう1個出しましょう!

f:id:Free_Gamer:20180514193159p:plain

そして、「<(小なり)」ノードを出しましょう!

グラフ内で右クリックし検索欄に「<」と打つと、

f:id:Free_Gamer:20180514193452p:plain

「Integer<Integer」「Integer≦Integer」の2つが出てきます。

どちらでもいいので、今回は「Integer≦Integer」を選びましょう!

f:id:Free_Gamer:20180514193815p:plain

このノードは、「「A」がB」と同等、あるいはB」より小さい場合、Trueを返す」ノードです。

なぜこのノードを使うのか、後程わかります!

さて!このノードのA」に、セットTimer変数のピンをつなげ、B」には「0」の値を入れておきましょう!

そして、「Integer≦Integer」の赤いピン、いわゆるBooleanピンをBranchのConditionにつなぎましょう!

Booleanは、「True」か「False」の値を持つ型ですよ。

f:id:Free_Gamer:20180514194354p:plain

出来ましたか??

そして、BranchのFalseを、もう1個のPrintStringにつなぎましょう!

f:id:Free_Gamer:20180514194526p:plain

最後に、セットTimer変数のピンをFalseにつながっているPrintStringのピンクのピン、Stringピンにつなぎ、

f:id:Free_Gamer:20180514194659p:plain

セットFinishCount変数のピンをすぐ隣につながっているPrintStringのStringピンにつなぎましょう!

f:id:Free_Gamer:20180514194824p:plain

OKです!これで完了です!

さて!ここでBPの流れを整理しましょう!

①ゲーム開始時EventTickが毎フレーム呼び出される

1秒おきにカウントダウンが始まる。

この時まだカウントダウンの秒数は0より上つまり「A」が「B」より大きいためBranchの処理はFalseに流れている。

③カウントダウンが「0」になったとき、A」がB」と同等、それ以降はずっとB」より小さくなるので、「Integer≦Integer」が「True」を返し、Branchの処理は「True」に流れ続ける。

④TrueにつながっているセットFinishCount変数のデフォルト値「0」を、PrintStringによって表示し続ける。

 

といった感じです!

それではコンパイルし、実際にプレイしてみましょう!


ブログ用 カウントダウン処理 修正版

動画のように行きましたでしょうか??

行ったのなら大成功です!よかったですね!^^

 

ちなみに、「Integer<Integer」ノードを使っても結果は変わりません。

実際にやってみるとわかります。

 

さて!うまくいって (((o(*゚▽゚*)o)))ウェーイwwwwwwww としているところで一つアドバイスです!

これは僕が実際にやった間違いなので、よーく覚えといてください!

 

僕は、このカウントダウンの処理を作っているときに、

「0、つまり「A」が「B」の0と同等の時にTrueにつながっている処理を流すようにしよう!」

と決めました!

なので、「A」と「B」が同等の時にTrueを返すノード「Integer=Integer」ノードを出しました!

これのことですね!

f:id:Free_Gamer:20180514202339p:plain

そしてあとは同じように処理を組んでいく!

ノリノリで作り、さあ完成!

f:id:Free_Gamer:20180514201503p:plain

 

さあ!プレイスタートだぁあ!

確かめてみると・・・


ブログ用 カウントダウン処理 間違いバージョン

動画を見てもらうとわかったかと思いますが、0に到達したのにも関わらずそのまま「-1」「-2」・・・と続いてしまいました。

なぜでしょう??この時の僕は本当に悩みました。

さて、勘のいい人ならもう気づいたかもしれませんが、僕は痛恨の勘違いをしています。

いったいどこを勘違いしたというのでしょうか??

変数をミスった??デフォルト値が違う??そもそもこれ本当にUE4??それとも俺のPCがbg(ry・・・

原因はどれでもありません。原因はこれです!

さっきの文章を思い出してみましょう。

 

「0、つまり「A」が「B」の0と同等の時にTrueにつながっている処理を流すようにしよう!」

と決めました!

なので、「A」と「B」が同等の時にTrueを返すノード「Integer=Integer」ノードを出しました!

f:id:Free_Gamer:20180514202339p:plain

さあ気づきましたか??

原因は「Integer=Integer」ノードにあったのです!

くどくて申し訳ないですが、「Integer=Integer」ノードは「A」と「B」が同等の時に「True」を返すノードです。

 

言い方を変えると、「A」と「B」が同等の時に”しか”Trueを返さないということになります。

 

つまり、カウントダウン用のTimer変数が0になった時にちゃんと「True」に処理が流れているのですが、「B」と同等になるのは一瞬なので、0以下になった時点ですぐにFalseに処理が戻り、そのまま0以下の数値が表示された。

と、いうことになります。

実際にBPの処理がどう流れているかの映像も含めて動画にしました。見てみるとよくわかると思います。


ブログ用 カウントダウン処理 間違いBP

おわかりいただけただろうか。

僕の言った通り、「A」と「B」が同等になった時だけ「True」に流れ、それ以降はすぐに「False」の処理に戻りましたね。

 

僕と同じようなミスをしないよう皆さんにお伝えしました。

まあ僕がバカなだけってのもありますが(真顔)

 

もし、カウントダウン処理のあるゲームを作りたいということであれば、参考にしてみてください!

それではまた!^^ノシ