質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VIVE

VIVEは、VR向けヘッドマウントディスプレイです。センサーによって部屋自体をVR空間にするルームスケールが大きな特徴。プレイヤーはその空間を自由に歩き回ることが可能なため、高い没入感を体験できます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

Q&A

解決済

1回答

2393閲覧

時間制限をwidgetで画面に表示したい

yabbb

総合スコア16

VIVE

VIVEは、VR向けヘッドマウントディスプレイです。センサーによって部屋自体をVR空間にするルームスケールが大きな特徴。プレイヤーはその空間を自由に歩き回ることが可能なため、高い没入感を体験できます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

0グッド

0クリップ

投稿2018/12/11 07:01

編集2018/12/12 05:26

いつもお世話になっております。UE4のBlueprintについて質問させていただきます。現在、時間制限をwidgetにて表示させるシステムを作成しようとしています。
10秒の時間制限を設けるとして、widgetでそれぞれ「10」、「9」、「8」...とテキストを作成し、それを秒数事に画面上に表示させていこうと思っております。
しかし、widgetをそれぞれ表示させるところで躓いております。時間制限に関してはwidgetとは別に作成し、動いていることは確認できています。時間制限とwidgetを同時に起動させ、動きを合わせることで画面に時間制限を実装させようとしております。

それぞれの秒数を書いたwidgetのイベントグラフにwidgetを表示させ、setTimerbyFunctionNameを用いることで作成できないかと試してみましたが、うまく表示ができず、どうすれば良いかわからない状態です。

UE4を活用し始めて期間が短いため、見当違いな方法を用いているかもしれませんが、何卒ご容赦願います。上記の文章で説明不足な点がございましたら教えてくださるとありがたいです。
この方法ではなく別の方法を用いたほうが良いなどと意見がございましたら何卒ご教授お願いします。

追記
ほかのウェブサイト様を参照して行った時間経過の処理です。
https://gyazo.com/464cdf9565bc77e1c3939df7365bdd56

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

秒数毎にTextを用意するのではなく秒数を表示する用のTextを一つだけ用意し表示するテキストをBindingする方法がおすすめです。

イメージ説明

CreateBindingをクリックするとFunctionの作成画面に遷移するので
そこで現在の残り秒数を指定するような形にすることで実現できると思います
(SSのGetSecondsはこちらで用意した仮の関数です)

イメージ説明

追記 - 残り時間を0で止める方法

これはやり方が複数あります。

  • SetTimerByEvent / Function を使用して時間を測定し、0を下回った時点でタイマーを停止させる

このやり方が一番理にかなっています。現状SetTimerByEvent / Functionを使用していないのでその仕組みを入れる必要があります

  • UMGのReturnValueに返す前に0を下回っている場合0に補正をかける

このやり方が一番楽ですが、表示上のみ0なので実際の計算結果を他で使用する場合に不都合が生じる可能性があります

イメージ説明

自分の実現したい方・実現できる方法を選択してください。

投稿2018/12/11 16:14

編集2018/12/12 07:18
MMashiro

総合スコア2378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yabbb

2018/12/12 03:12

MMashiro様 毎度お世話になっております。ご回答とアドバイスをありがとうございます。 作業効率を考え、教えていただいたようにテキストをバインディングする方法に移行しようと考えております。そこで加えてお聞きしたいのですが、スクリーンショットでそちらでご用意されたGetSecondsの関数の中に時間経過を受け取る処理などを書かれているのでしょうか。 また、画面に表示するために数字を変更する処理はどのように書かれておられますか? print stringなどで表示すればそのまま画面の文字が変更されるのでしょうか。 お手数ですが教えていただけるとありがたいです。
MMashiro

2018/12/12 03:27

GetSecondsはそれっぽい名前でただ単に今回用意した関数です。 UMG側にLeftTime的な変数を用意し、 時間制限を管理するBPがすでにあると思いますがそのBPから今回のUMGを作成して、タイマーを走らせるたびにUMGのLeftTimeに残り秒数を入れるのはどうでしょうか。 UMGのBindingからはLeftTimeを返すようにすることであとはBindingの機能でText側の文字が自動的にLeftTimeの数値に置き換わるはずです
MMashiro

2018/12/12 03:30

イメージとしては以下のような流れです ・時間管理BPからUMG作成(Create Widget->Add to Viewport) ・タイマー開始。今回はTimeを1秒とする(setTimerbyFunctionNameまたはsetTimerbyEvent) ・タイマーが呼び出される度にUMGの中にあるLeftTime変数に残り秒数を代入 ・UMGからはBindingのReturn Valueの箇所にLeftTimeをつなげる
yabbb

2018/12/12 05:32

MMashiro様 ご回答ありがとうございます。質問内容に間違いがありましたので訂正させていただきます。 時間制限に関してはwidgetとは別に作成し、動いていることは確認できていると記述いたしましたが、実際には時間を表示するテキストのイベントグラフに処理を書いていました。申し訳ございません。 もしこのイベントグラフに作成した時間をウィジェットに表示させる場合、どのような処理を行えばいいでしょうか。せっかくアドバイスをくださったのに申し訳ございません。 また、このやり方ではなくMMashiro様がおっしゃった方法のほうが良いなどとあれば教えてくださるとありがたいです。 一度MMMashiro様がおっしゃった流れに沿って考えてみたのですが、時間制限をどのように変更すればよいかがわからず、躓いてしまいました。大変申し訳ありませんが、ご教授いただければ幸いです。
yabbb

2018/12/12 05:33

他のウェブサイト様から参照して作成した時間経過のソースコードのURLを追記しましたので、ご参照いただければ幸いです。申し訳ございませんが、宜しくお願い致します。
MMashiro

2018/12/12 05:40

提示いただいた画像がUMGのイベントグラフにあるということで合ってますでしょうか? でしたらBindingのReturnValueにTimeLimit変数をつないでみてくださいそれだけで実現できると思います
yabbb

2018/12/12 06:00

MMashiro様 ご教授ありがとうございます。何度も申し訳ございません。 BindingのReturnValueにTimeLimitをに繋いでみたのですが、テストしてみるとカウントが0のまま動きません。以下、BindingしているGet_Text0のBP https://gyazo.com/2041975c25db1f2c08d69a9f0feedbca
yabbb

2018/12/12 06:02

以下、0から進まないテストのSS https://gyazo.com/49dd849622455cf20a77bea6fd56c98d TimeLimitの初期値には数字を入力してあります。 申し訳ありませんが、間違っているところなどあればご教授お願い致します。
MMashiro

2018/12/12 06:04

https://gyazo.com/2041975c25db1f2c08d69a9f0feedbca この画像のTimeLimitノードはSETノードです。今回は取得を行いたいのでGETノードを使用してください。グラフ上で右クリックして Get TimeLimit と検索すれば出てくると思います
yabbb

2018/12/12 06:11

ご回答ありがとうございます。Getノードで試してみた結果、初期値である15という数字が表示されました。しかし、その数字から動かず、時間が経っても数字がマイナスされません。イベントグラフの処理でおかしな点があるのでしょうか。 ためしにCurrentTimeのGETノードをReturnNodeに繋いでテストをしてみた結果、0から1へ、2へと数字が増えていました。TimeLimitに数字が格納されていないのでしょうか。お手数ですがご教授頂けると幸いです。
MMashiro

2018/12/12 06:23

すいません見間違えていました、TimeLimitは制限時間の規定値を表しているのですね。 でしたらTimeLimit - CurrentTime をReturnValueにつないでやれば行けると思います
yabbb

2018/12/12 06:42

MMashiro様 ご教授いただいたようにTimeLimit-CurrentTimeをReturnNodeにつないでみた結果、行いたい処理が実行されました!本当にありがとうございます。もう1つだけお聞きしたいのですが、現状、時間制限が0になっても数字がマイナスされ続け、-1、-2と数字が進んでしまいます。0で秒数を止めたいのですが、マイナスされるCurrentTimeの動きを止めるためにどのような処理を記述すればよいでしょうか。厚かましく質問してしまい、申し訳ございません。よろしければご教授お願い致します。
yabbb

2018/12/12 07:26

MMashiro様 追記のご回答ありがとうございます。大変詳しく二通りの解説をいただき、一度SetTimerbyEvent/Functionについて調べ、試してみます。解決しない、難易度が高く完成しないようであれば2つ目の方法で行いたいと思います。 大変長らく説明してくださり、ありがとうございました。大変勉強になりました。もしまた機会がございましたら、何卒宜しくお願い致します。
MMashiro

2018/12/12 07:43

不明な場所が有れば一つ一つ質問として挙げて頂ければ回答しやすく、回答が得られやすくなるので細かい粒度で質問していただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問