【日本語】 UE4 ホッケーゲーム part.25 得点表示UMG 【チュートリアル】
自作の [GameMode] である "ZZ_GameMode" に貯めた得点データを UMG 表示させよう。先ずは表示用のウィジェットブループリントを作る。
----------
- [Content Browser] > 右クリ> [User Interface] > [Widget Blueprint]
- 名前を付けて("WG_Score" とした)、ダブルクリックで開く
- 結果的にこうなればいいので、順に
- [Canvas Panel] に [Horizontal Box] を2個持ってくる
- その [Horizontal Box] に [Text] を2個づつ持ってくる
- "Player" 側の [Horizontal Box] の設定
Anchors : 上・中央
Position X : -100 (マイナス!)
Position Y : 50
Alignment : X 1.0 (1.0、つまり右に!)
Size To Content : チェック - "Com" 側の [Horizontal Box] の設定
Anchors : 上・中央
Position X : 100
Position Y : 50
(Alignment はそのまま 0.0)
Size To Content : チェック
- "Player" 側の [Text] の設定
左の [Text]
Text : "Player : "
Font : 96
右の [Text]
Text : "0"
Font : 96 - "Com" 側の [Text] の設定
左の [Text] が "Com : " になっただけ、あと同じ
【追加の解説】
[1] ~ [9] 特に無し。[8] [9] で Text に "0" を入れた部分にゲームでとった得点を表示することになる。あとは好きに見た目を整えれば良いと思う。上に挙げたのは一例。
----------
このウィジェットブループリントを、以前やった(スタートメニューでやった)ように表示させれば、見た目は整う。あとは、得点にあたる部分(Text で "0" と書き入れた部分)に、"ZZ_GameMode" から、得点データ(変数 "ScorePlayer")を持ってくればいいだけ。これは、非常に簡単。
- "Player" 側の "0" を入れた [Text] が選択されていることを確かめて、横にある[Bind▼] ボタンを押して、[+ Create Binding] をクリック
- "Get Text 0" のような名前の新しいタブが出来、そこにグラフが書けるようになっている。
- 右クリから、[Get GameMode]
- [Return Value] から引っ張って、[Cast To ZZ_GameMode]
- [As ZZ Game Mode] から引っ張って、[Get ScorePlayer]
- 出力ピンを [Return Node] の [Return Value] へ
- 実行線をつなぎ直して
- コンパイルすると、エラーらしきものが出るが、エラーではないので、OK
【追加の解説】
[1] "bind"(バインド)とは「縛り付ける」という意味。ここのテキストの内容をどこかのデータと結びつけるっていうこと。具体的にはグラフを書いていく必要がある。
[2] [EventGraph] が開くのではなく、新しいタブが出来て、専用のグラフが開く。これは、[Bind] した部分の専用のグラフで、出てきた [Return Node] の [Return Value] が [Text] の内容になるものである。つまり、最終的にここ(Return Value)に "ZZ_GameMode" の "ScorePlayer" の値を持ってこれれば勝ちということだ。頑張ろう。
それから、[My Blueprint] の [Functions](ファンクションズ) に同名のものがある通り、このグラフは、[Function] の一つであることが分かるのだが、ファンクション(関数)とは、簡単に言うと、長ったらしい、特に重複する処理をメインの処理の外に出したもののこと。一応、公式の説明はココ"Unreal Engine | 関数"。説明、むずいな。
今回のウィジェットブループリントでは、メインの [EventGraph] とは別の [Text] 専用の処理と考えればよい。
[3]~[7] ここの処理は、"cast" がちゃんと分かっていれば問題ない流れだと思う。[Get ZZ_GameMode] って直接出来ないから、こうなってるんだったよね。また、"ZZ_GameMode" の変数 "ScorePlayer" にアクセス出来るのも、この "cast" のおかげだ。"cast" することで、自分以外のブループリントのデータにアクセスすることが出来るのだったね。
[8] 失敗するわけはないので、これでOK。もし "NOTE" っていうのが気になる人がいたら、[Cast Failed] からてきとうに [Print String] で "Fail" とか書いて [Return Node] に繋げばイイ。
----------
これで、ほぼ完成。あとは、2面のレベルブループリントに表示させるノードを追加するだけ。ウィジェットブループリントを表示させるには、「Create + Add」だったよね。だから、こうする。
さあ、コンパイルしてプレイだ。
ご覧のように、相手ゴールに入ったら得点が増えていくはずだ。
自分のゴールに入った場合は、まだ処理がナイので何にも起こらない。"0" のまま。だが、やらなければならない事は、同じなので、説明しなくても出来るはず。"ZZ_GameMode" に得点加算の処理を書いて、ウィジェットのテキストにバインドだ。やってみてくれ。
しかし、コンピュータ側、自分側、ともに得点表示処理がうまくいっても、点が増えるだけで、このままでは一生、どちらかが勝利してゲームオーバーとはならない。次回は10点取ったらゲームオーバーとなるように作っていこう。
ではまた。"Save All"。