俺に解るように説明する "Unreal.Engine.4" 入門+

UnrealEngine4とかチュートリアルとか入門とか

【日本語】 UE4 ホッケーゲーム part.25 得点表示UMG 【チュートリアル】

自作の [GameMode] である "ZZ_GameMode" に貯めた得点データを UMG 表示させよう。先ずは表示用のウィジェットブループリントを作る。

 ----------

  1. [Content Browser] > 右クリ> [User Interface] > [Widget Blueprint]
  2. 名前を付けて("WG_Score" とした)、ダブルクリックで開く
  3. 結果的にこうなればいいので、順に
  4. [Canvas Panel] に [Horizontal Box] を2個持ってくる
  5. その [Horizontal Box] に [Text] を2個づつ持ってくる

f:id:ore2wakaru:20160429220826j:plain

  1. "Player" 側の [Horizontal Box] の設定
    Anchors :  上・中央
    Position X :  -100  (マイナス!)
    Position Y : 50
    Alignment :  X  1.0  (1.0、つまり右に!)
    Size To Content :  チェック
  2. "Com" 側の [Horizontal Box] の設定
    Anchors :  上・中央
    Position X :  100
    Position Y : 50
    (Alignment はそのまま 0.0)
    Size To Content :  チェック

f:id:ore2wakaru:20160429224951j:plain

  1. "Player" 側の [Text] の設定
    左の [Text]
      Text :  "Player : "
      Font : 96
    右の [Text]
      Text :  "0"
      Font : 96
  2. "Com" 側の [Text] の設定
    左の [Text] が "Com : " になっただけ、あと同じ

f:id:ore2wakaru:20160429231237j:plain

【追加の解説】

[1] ~ [9] 特に無し。[8] [9] で Text に "0" を入れた部分にゲームでとった得点を表示することになる。あとは好きに見た目を整えれば良いと思う。上に挙げたのは一例。

----------

このウィジェットブループリントを、以前やった(スタートメニューでやった)ように表示させれば、見た目は整う。あとは、得点にあたる部分(Text で "0" と書き入れた部分)に、"ZZ_GameMode" から、得点データ(変数 "ScorePlayer")を持ってくればいいだけ。これは、非常に簡単。

  1. "Player" 側の "0" を入れた [Text] が選択されていることを確かめて、横にある[Bind▼] ボタンを押して、[+ Create Binding] をクリック
  2. "Get Text 0" のような名前の新しいタブが出来、そこにグラフが書けるようになっている。
  3. 右クリから、[Get GameMode]
  4. [Return Value] から引っ張って、[Cast To ZZ_GameMode]
  5. [As ZZ Game Mode] から引っ張って、[Get ScorePlayer]
  6. 出力ピンを [Return Node] の [Return Value] へ
  7. 実行線をつなぎ直して

f:id:ore2wakaru:20160430001956j:plain

  1. コンパイルすると、エラーらしきものが出るが、エラーではないので、OK

f:id:ore2wakaru:20160430003111j:plain

【追加の解説】

[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」だったよね。だから、こうする。

f:id:ore2wakaru:20160430014340j:plain

さあ、コンパイルしてプレイだ。

f:id:ore2wakaru:20160430015019j:plain

ご覧のように、相手ゴールに入ったら得点が増えていくはずだ。

自分のゴールに入った場合は、まだ処理がナイので何にも起こらない。"0" のまま。だが、やらなければならない事は、同じなので、説明しなくても出来るはず。"ZZ_GameMode" に得点加算の処理を書いて、ウィジェットのテキストにバインドだ。やってみてくれ。

しかし、コンピュータ側、自分側、ともに得点表示処理がうまくいっても、点が増えるだけで、このままでは一生、どちらかが勝利してゲームオーバーとはならない。次回は10点取ったらゲームオーバーとなるように作っていこう。

ではまた。"Save All"。