‫やあ､ お帰りなさい｡
‫このビデオでは､ プレイヤーが戦車を動かして爆破を開始するまでの待ち時間を知ることができるカウントダウンタイマーを作成します｡
‫そこで､ ゲーム開始までの残り時間をカウントダウンタイマーで表示することにしました｡
‫では､ エディタに飛び込んで､ この作業を始めてみましょう｡
‫Widget BlueprintのBP Start Game Widgetで､ Widget Editorを表示します｡
‫しかし､ 右上に2つのタブがあることにお気づきでしょうか｡ 1つはデザイナーと書かれたものです｡
‫それが今､ グラフと書いてあるものです｡
‫グラフをクリックすると､ イベント ノードのあるブループリント イベント グラフのように見え､ さまざまなセクションがあるマイ ブループリント
‫タブがここに表示されます｡
‫そして､ ここでブループリント・ロジックができるのです｡
‫これで3つのノードが揃いました｡
‫イベントプリコンストラクションがあります｡
‫これはC++のコンストラクタに似ています｡ そして､ begin playに似たイベントコンストラクトがあります｡
‫そこで､ この時点までに関連するクラスがすべて構築され､ さらにイベントチックを行うため､
‫ゲーム開始時に行うのが適切なのです｡
‫そして､ C++のtick関数と同じように､ ここではデルタ時間にアクセスできるようになっています｡
‫さて､ 最初の2つのノードは使わないので､ それらをハイライトして削除し､ イベントテックを使うことにします｡
‫さて､ このビデオのゴールは残り時間を表示することですが､ 現在C++で3秒のカウントダウン・タイマーを作成しています｡
‫タイマーハンドルを作成し､ ワールドタイマーマネージャーを使用してタイマーを開始しました｡
‫このブループリントで行っていることは､ すべてそれとは無関係です｡
‫ここでは全く別のシステムのロジックを作成しており､ C++で設定したタイマーと一致させるだけです｡
‫つまり､ これはすべてC++側とは別の独立したものなのです｡
‫WBのゲーム開始ウィジェットでは､ C++で変数を追加するのと同じように､ ここで変数を追加することができます｡
‫ブループリントの下にあるaddをクリックし､ 変数を選択すると､ new var underscore zeroという変数ができます｡
‫そして､ この下にある詳細パネル（紛らわしいですが､ 左側にあります）には､ 変数名と変数型が表示されています｡
‫デフォルトでハイライトされているのは､ 変数を作成したらすぐに名前を変更することが想定されているからです｡
‫だから､ このデフォルトの名前は必要ないのです｡
‫これを自分たちの名前にするんです｡
‫カウントダウンと名付けます｡
‫そして､ Countdownはfloat変数Yになります｡ これは､ 残り時間を記録するためのものだからです｡
‫3秒からスタートして､ 1フレームごとに前のフレームからの経過時間を引いていきます｡
‫だから､ 3から下に向かってカウントダウンが行われる｡
‫では､ 「コンパイル」をクリックします｡
‫これで､ コンパイルをクリックしたらすぐに､ 詳細でスクロールダウンしてこのデフォルト値を与えることができます｡
‫パネル､ デフォルトでゼロに設定されています｡
‫3秒のカウントダウンがあるので､ デフォルトで3に設定することにします｡
‫今現在の時間は､ 値が3のCountdownというfloatがあるだけです｡
‫実際には変えていませんが､ ゲームの1フレームごとに､ 前のフレームから経過した時間であるデルタタイムを引き算していきたいと思います｡
‫そうすれば､ カウントダウンは常にデルタ時間でデクリメント更新されるので､ 実行時間のカウントができる｡
‫さて､ その方法はこうです｡
‫My Blueprint」タブからカウントダウンを取り出し､ クリックしてイベントグラフにドラッグし､ リリースします｡
‫さて､ 発売と同時に､ 私には2つの選択肢があります｡
‫カウントダウンを取得し､ カウントダウンを設定します｡
‫Get Countdownをクリックすると､ カウントダウンのメモが表示され､ その出力からクリック＆ドラッグすると､
‫Countdownの値にアクセスできるようになります｡
‫カウントダウンをクリックしてドラッグし､ カウントダウンを設定するをクリックすると､ 設定されたノードができます｡
‫この2つは以前にも見たことがあります｡
‫以前の動画では､ セッターの入力端子にfloatの値を入れると､ その値にカウントダウンが設定されるようになっていました｡
‫では､ 実際にCountdownからDelta time awayを引いて､ それをカウントダウンの値に設定するにはどうしたらいいのでしょうか？
‫さて､ ここでカウントダウン・ノードを取り､ クリックしてドラッグし､ キーボードでマイナス記号をタイプして､
‫サブトラクト・ノードを選択します｡
‫これを選択すると､ floatからfloatを引く､ あるいはsubtractノードができます｡
‫Target is Kismet Math Libraryと書いてあるのがわかると思います｡
‫これは､ Kismet Math Libraryがこのノードを支えていることを物語っています｡
‫すべてのノードは､ C++のコードをコアにしています｡
‫このノードが行うことは､ 2つの入力を受け取ることです｡
‫フロート入力を受け持つ｡
‫そして､ 1秒間のフロート入力が必要です｡
‫さて､ このままでは渡している変数が何も変化しない｡
‫単純に計算をして､ 引き算の結果であるその値を返すことになる｡
‫そこで､ イベントティックノードからデルタタイムと呼ばれる出力ピンを取り出し､
‫それをそのまま減算ノードの2番目の入力に接続したいと思います｡
‫つまり､ カウントダウンからデルタタイムを引いて､ その結果を表示しているのです｡
‫現在､ 初期状態ではカウントダウンは3秒で､ デルタタイムは非常に小さな値になっています｡
‫最後のフレームから経過した時間（秒）です｡
‫だから､ これは微々たるものでしょう｡
‫つまり､ これを最初に実行したときの結果は､ 3からほんの少し引いたものになります｡
‫そして､ その結果と同じ値をcountdownの値として､ 毎フレーム設定したいのです｡
‫つまり､ 各フレームのカウントダウンが少しずつ引かれていくわけです｡
‫そうすれば､ 3秒からのカウントダウンを下降させ続けることができます｡
‫そこで､ この減算ノードの戻り結果を､ セットカウントダウン・ノードの入力に差し込むことにします｡
‫さて､ イベント､ ティック実行ピンからカウントダウン設定用入力ピンに実行線を接続しなければ､
‫これは何もしません｡
‫つまり､ これは毎フレーム､ カウントダウンからデルタタイムを引き､ その結果を受け取り､
‫カウントダウンをその新しい値に設定しているのです｡
‫では､ print stringノードでどのような挙動をするか見てみましょう｡
‫そこで､ セッタータイプのprint stringからドラッグして､ print stringノードを取得することにします｡
‫そして､ countdownの値を表示したいので､ セッターからの戻り値を受け取って､ 毎フレームcountdownの新しい値を与え､
‫それをin stringノードに差し込むことができるようにします｡
‫そして､ convert float to stringという項目がありますが､ これをリリースすると､ floatを受け取って文字列に変換し､
‫それを画面にプリントできる変換ノードが得られます｡
‫では､ 再生ボタンを押すとどうなるか見てみましょう｡
‫確認してみてください｡
‫そのカウントがフレームごとに記録されていると見て､ カウントダウンの値を画面にスパッと出しているので､ どんどんマイナスになっていくんです｡
‫これが､ カウントダウンタイマーを動作させるための最初のステップです｡
‫これにて終了とさせていただきます｡
‫小数点以下がたくさんあるfloat値を出力していることがわかりました｡
‫また､ 値を画面に表示する際､ 小数点以下は必要なく､ 整数が必要です｡
‫だから､ 小数点の右側にある末尾の数字を除いた残り秒数を表示したいんです｡
‫そこで､ 必要なのは整数です｡
‫さて､ 私ができることは､ この変換ノードを削除して､ カウントダウン・セッターの結果を受け取り､
‫C E I'll sealと入力することです､ これはsealingの略です｡
‫シーリング演算は､ float 値を取り､ 最も近い整数に切り上げることになります｡
‫だから､ 3つになったら､ まあ､ 丸める必要はないんです｡
‫値3を持つ整数を返すつもりだ｡
‫でも､ もし2. 9とすると､ 例えばシールノードは3つに切り上げることになる｡
‫そして､ その値が減っていくと､ 2つになるまで3を返し続けることになります｡
‫だから､ 常に整数を得ることになる｡
‫これをprint stringに突っ込むと､ Convert integer to stringと表示されるのがわかります｡
‫つまり､ sealノードがfloatを受け取り､ 最も近い整数に切り上げて､ その整数値を返しているのです｡
‫では､ 再生ボタンを押してみると､ 3対1でゼロになることがわかります｡
‫そしてもちろん､ 私たちはこれを実際に止めるように言うことはないので､ 下がり続けています｡
‫しかし､ これで残り秒数にアクセスできるようになり､ それに応じて画面に何かをプリントできるようになったのですから､
‫これは素晴らしいスタートと言えるでしょう｡
‫では､ どうやって正しいメッセージを画面に印刷するのでしょうか？
‫残り3秒になったら､ ウィジェットに「準備しろ」と表示させたいんです｡
‫残り2秒になったら､ 「2」という数字を表示してほしい｡
‫残り1秒になったら､ 1番を表示させたいと思います｡
‫そして､ 残り0秒になったら､ Goというテキストを表示させたいと思います｡
‫まあ､ これはスイッチ・ノードでできるのですが､ スイッチ・ノードはINTをはじめ､ さまざまな種類のスイッチを入れることができます｡
‫さて､ int型ノードのスイッチの仕組みは､ いくつかの値に対していくつかのケースがあります｡
‫そして､ このスイッチノードに渡された値に基づいて､ いくつかの処理のうちの1つが行われます｡
‫例えば､ 整数値であるthreeを渡すと､ three caseとなり､ threeが実行されることになる｡
‫つまり､ エンドノードのスイッチには複数の実行ラインがあり､ それに基づいて1つだけ実行されるのです｡
‫入力のことです｡
‫ここで､ intノードのスイッチを使い､ sealノードの結果などの整数を渡すことができます｡
‫そこで､ 印刷文字列を削除して､ カウントダウン・ノードからドラッグして､ switch on INTとタイプして､
‫switch on intを選択します｡
‫ここで､ 入力は整数型であることに注意してください｡
‫sealノードの戻り値を渡すと同時に､ add pinオプションがあることに気づきます｡
‫これをクリックすると､ ゼロという出力に加え､ デフォルトのピンが表示されるのがわかると思います｡
‫これは､ ゼロ実行ピンからブループリントのロジックをフックすると､ そのロジックが実行されることを意味します｡
‫渡された入力値が0であり､ うまくいかなければ､ この実行ピンがデフォルトになります｡
‫ここでもう一度ピンの追加をクリックすると､ 今度は0と1ができます｡
‫つまり､ ゼロと1の2つの実行ラインを用意すればいいわけです｡
‫そして､ 入力が0か1でなければ､ デフォルトにフックされているものが実行されます｡
‫あと2回､ プラスをクリックします｡
‫そこで､ 0から3までのケースと､ デフォルトのケースを用意しました｡
‫次に､ これをドラッグして､ SEAL ノードから渡された値に基づいて実行するブループリント
‫ロジックを追加します｡
‫そして､ それがあなたのチャレンジしてほしいことなのです｡
‫それぞれのケースについて､ print stringノードを使って異なるメッセージを表示してほしい｡
‫2の場合は単純に2を表示し､ 1の場合は1を表示し､
‫0の場合はgoを表示します｡
‫ビデオを一時停止して､ 今イベントグラフに印刷文字列のノードをたくさん追加してください｡
‫なるほど｡
‫そこで､ print stringノードを使いたいと思います｡ デフォルトのケースとして､ この下の方からprint
‫stringと入力します｡
‫そして､ 表示したい文字列は､ start gameです｡
‫さて､ ここでショートカットを紹介します｡
‫プリントストリングノードを選択した状態で､ イベントグラフ内の他の場所にマウスカーソルを置いてコントロールDXを押すと､
‫選択したノードがコピーされることをご存知でしたか？
‫このprint stringノードに3つのケースをフックして､ get readyと入力します｡
‫だから､ スイッチへの入力が3つになったときに
‫スクリーンに印刷された､ 準備をする｡
‫さて､ もう一度DXを制御して､ これを2のケースにフックして､
‫2については単純に2をプリントすることにします｡
‫最後に､ このプリントストリングノードはゼロケースに接続され､ これはgoと表示されます｡
‫なるほど｡
‫では､ これをコンパイルして､ 再生ボタンを押すと､ get ready, two, one and goと表示されます｡
‫そしてもちろん､ 時間がなくなったらゲームを開始するのも見ています｡
‫ですから､ 値がどんどん減ってマイナスになることは分かっているのですが､ それがスイッチのデフォルトのケースであり､
‫実際にゲームを開始できるのはその時だと分かっているのです｡
‫これが､ ウィジェットにカウントダウン・タイマーを表示するための最初のステップです｡
‫まだGet readyと書かれたテキストを変えるまでには至っていませんが､ 近日中に行います｡
‫そこで､ このビデオでは､ カウントダウン・ロジックを作成し､ それをウィジェット設計図に追加しました｡
‫print string を使って､ カウントダウンの値を表示し､ 別のメッセージを表示するようにしました｡
‫当社のカウントダウン値に基づいています｡
‫ウィジェットにテキストを設定する必要がありますが､ 次のビデオでそれを行います｡
‫また､ お会いしましょう｡