横スクロールゲーム製作記(3)

前回から進んだこと

アイテムを出したあと一定時間アイテムを出せなくする(Timerの処理)

その時間を円形ゲージで表示させる(マテリアル関係l)




というわけで最初はアイテムを出したあと一定時間アイテムを出せなくする。という処理の内容について。


ブループリントはこんな感じです。




処理の流れとしては〇〇Stop変数というのを作りタイマーで時間経過するまでPush変数をSETする前にBranchで止めるという感じです。


Push変数をtlueにする前に一つBranchノードをはさみます。

条件は〇〇Stop変数でfalseの時にPush変数をtlueにします。

〇〇Stop変数をtlueにしてSet Timer by Eventで一定時間を計ります。

Return ValueはTimer Handle変数にセットしときます。

(Timer Handleは時間をリセットしたり残り時間なんかができるみたいです。)

Set Timer by EventのEventピンからカスタムイベントを作りそこに〇〇Stop変数のSETをつなぎfalseにします。

これでタイマーが終了したら〇〇Stop変数がfalseになります。

この処理を3つ分作り”アイテムを出したあと一定時間アイテムを出せなくする”は一応完成です。




次はその時間を円形ゲージで表示させるについてです。


この処理と言うかこのブログの記事全体についてですがプログラミング完全素人の筆者が書いてるので間違いが多々あると思うので注意してください。
特に今から書くマテリアル関係はほとんど理解できてない中、なんとか作った処理です。

という前置きでした。



UE4のウィジェットにはProgressBarという時間の表示に適していそうな物が用意されているのになぜ円形ゲージで表示という難易度の高そうなことをするのかというと、UE4 ゲージでググって見ると作り方が書いてあるブログが出てきます。

それでカッコいいなと思ったので作ってみようと頑張りました。

でまあ円形ゲージの作り方はググってください。

その後のSet Timer by Eventの残り時間をゲージに反映させるところを書いていきます。


まずマテリアルをゲーム中に変更したい場合はダイナミックマテリアルインスタンスというものを使うみたいです。

説明用にスクショ取るついでに見返した所マテリアルの部分で参考元と違う処理していました。


参考元はVectorParameterで色をつけてたのですが自分はテクスチャでつけてました。
同じ色が並ぶのはなんか変なのでVectorParameterに変更します。
マテリアルはこんな感じになりました。




次にウィジェットでの作業です。

最初にデザイナーモードでパレットにimageパネルを置いてimageにマテリアルを適用します。




次にグラフモードに切り替えてEvent Constructでダイナミックマテリアルインスタンスを作成します。

マテリアルを適用したimageの変数?をグラフ上に出しそこからGet Dynamic MaterialをしてSet Vector Parameter Valueノードを出し色を設定します。
これを他のアイテム分行いこれで各アイテムごとに色の違う円形ゲージが出来ました。





続いて、ゲージを時間によって減らす処理を作りました。





ティックイベントで処理するのが良いかなと思ったのでティックで動かします。

前回の記事には書いてませんでしたがアイテムをスポーンさせる処理をプレイヤーBPからウィジェットBPに書き換えてました。

その処理はティックイベントから動かしてるのでSequenceで処理を分けます。

ゲージの減らし方ですがまたGet Dynamic Materialをします。今度はSet Scalar Parameter Valueをします。

このOffset値を変えることで残り時間を変えることが出来ます。

この値をどうやって求めるかというと
まずTimer Handle変数をGETしてそこからGet Timer Remaining Time by Handleノードを出します。これが残り時間を取得するノードになります。

Offset値は0~1の範囲の値なのでどうするのかプログラム素人には難しかったですがNormalize To RangeノードのValueに残り時間 Range Maxに一定時間の値をつなげ0~1の範囲にすることが出来ました。

これを各アイテムに作り完成です。

0 件のコメント :

コメントを投稿