お盆休みなどで実家に帰っていたり旅行に行ったりでしばらくパソコンに触れませんでした
久々に進めていきます
スマホでUE4の開発できたらいいのにな
http://unrealengine-blog.hatenablog.com/entry/2014/05/09/004856
次はスコアとHPバーを表示するみたいです
インベーダにHPバー・・・?
本物に近づけるために後で残機に改造してみよう
今は手順通り進めていく
HUDクラスで画面に文字を表示してみる
・コンテンツブラウザ→コンテンツ→Blueprints→新規追加→ブループリントクラス→すべてのクラス→Object→Actor→HUD→選択→名前「MyHUD」
・上部メニュー→ウィンドウ→ワールドセッティング→GameMode→選択したゲームモード→HUD Class=MyHUD
・コンテンツブラウザのMyHUDをダブルクリックで開く→イベントグラフへ移動
・ブループリント上を右クリック→イベントを追加→イベントReceiveDrawHUD
→線を引き→HUD→DrawText
→Text=Hello!、TextColor=白、ScreenX=20、ScreenY=10、ScalePositionにチェック
→Scaleから線を引き→演算→Float→float / float→下段に640
→上段から線を引きSize Xとつなげる
左上にHello!と表示された
※インベーダの数を増やしたりカメラを引いて傾けたりしてました
ブループリントインターフェースを作成する
・コンテンツブラウザ→コンテンツ→Blueprints→新規追加→ブループリント→ブループリントインターフェース→名前「MyInterface」
ここから先はこまめにコンパイルしないと呼び出せない事もあるのでおかしいなと思ったらコンパイルしてください
インターフェースを関連付ける
・コンテンツブラウザ→コンテンツ→Blueprints→MyGameStateをダブルクリックで開く
→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface
・コンテンツブラウザ→コンテンツ→Blueprints→MyHUDをダブルクリックで開く
→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface
・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBuleprintをダブルクリックで開く
→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface
インターフェースに関数を作る
・コンテンツブラウザ→コンテンツ→Blueprints→MyInterfaceを開く
・新規関数_0をクリック→名前「GetScore」
→詳細→アウトプット→+新規パラメータ→名前「Score」、型「Integer」
・関数→+関数→名前「AddScore」
→詳細→インプット→+新規パラメータ→名前「Score」、型「Integer」
MyGameStateからスコアを渡す
・コンテンツブラウザ→コンテンツ→Blueprints→MyGameStateを開く
・変数→+変数→名前「Score」、型「Integer」
・インターフェース→GetScoreをダブルクリック
(本編通りにやっても動かなかったがこうすると動いた)
・リターンノードのScoreから線を引き→変数→デフォルト→GetScore
・イベントグラフへ移動
→右クリックで→イベントを追加→イベントAddScore
→Scoreから線を引き→演算→Integer→integer + integer
→左下から線を引き→変数→デフォルト→GetScore
→右側から線を引き→変数→デフォルト→SetScore
・イベントAddScoreとSetScoreをつなぐ
敵が死んだらスコアを足す
・コンテンツブラウザ→Blueprints→EnemyBlueprintを開く→イベントグラフ
・敵爆発処理のSpawnActor Blueprint Effect Explosionの右上から線を引き
→クラス→MyInterface→AddScore(メッセージ)→Score=10
→ターゲットから線を引き→ゲーム→GetGameState
・AddScoreとDestoroyActorとつなぐ
画面にスコアを表示する
・コンテンツブラウザ→Blueprints→MyHUDを開く→イベントグラフ
・イベントReceive Draw HUDの左上から線を引き→状況に合わせた表示のチェックを外し→クラス→MyInterface→GetScore(メッセージ)
→ターゲットから線を引き→ゲーム→GetGameState
→Scoreから線を引き→ユーティリティ→ストリング→BuildString(int)
→Prefix=Score
・GetScoreとDrawTextをつなぐ
・BuildString(int)のReturnValueとDrawTextのTextをつなぐ
これで左上にスコアが表示されて敵が爆発すると10づつ増えます
続いてHPバーの表示
弾が当たるとダメージを与える
・コンテンツブラウザ→Blueprints→BulletBlueprintを開く→イベントグラフ
・イベントActorBeginOverlapから線を引き→ゲーム→ダメージ→ApplyDamage
→OtherActorとDamagedActorをつなぐ
→BaseDamage=10
→右側から線を引き→ユーティリティ→DestoroyActor
自機爆発処理を変更する
・コンテンツブラウザ→Blueprints→PlayerBlueprintを開く→イベントグラフ
・変数→+変数→名前「Health」、型「Integer」→コンパイル→デフォルト値=100
・イベントActorBegineOverlapを削除
・右クリック→イベントを追加→イベント→ダメージ→イベントAnyDamage
→右側から線を引き→変数→デフォルト→SetHealth
→Healthから線を引き→演算→Integer→integer - integer
→左上から線を引き→変数→デフォルト→GetHealth
→左下から線を引き→演算→Float→Floor
→Aから線を引きイベントAnyDamageのDamageにつなぐ
・SetHealthの左から線を引き→ユーティリティ→フロー制御→ブランチ
→Conditionから線を引き→演算→Integer→integer <= integer
→左上をinteger - integerにつなぐ
→TrueとSpawnActor Blueprint Effect Explosionをつなぐ
この時点で再生すると10発ぐらいまで敵の攻撃を耐えられるようになった
3発目で爆発させたいならBaseDamage=40を指定すれば良いのかな?
と試しにやってみると2発目で爆発
BaseDamage=30を指定すると3発目で爆発
なぜだろう
BaseDamage=10に戻して着弾数を数えると9発目で爆発
計算が合わないが本編とは関係なさそうなので今は気にしないでおく
インターフェースでHealthを渡せるようにする
・コンテンツブラウザ→Blueprints→MyInterfaceを開く
・関数→+関数→名前「GetHealth」
→詳細→アウトプット→+新規パラメータ→名前「Health」、型「Integer」
・コンテンツブラウザ→Blueprints→MyGameStateを開く
・変数→+変数→名前「Health」、型「Integer」
HPバーをテクスチャに登録
自分で描いても良いけど今回は先人者様の素材をそのまま使わせていただきます
素材をダウンロードしてHealth.pngで保存
・コンテンツブラウザ→StarterContent→Textures→インポート→Heath.png
→名前変更→T_Health
HPバーを表示する
・コンテンツブラウザ→Blueprints→MyHUDを開く
・関数→+関数→名前「DrawHealthBar」
→詳細→インプット→+新規パラメータ→名前「InPosition」、型「構造体→Vector2D」
→インプット→+新規パラメータ→名前「InScale」、型「Float」
→右側から線を引き→状況に合わせた表示のチェックを外し→クラス→MyInterface→GetHealth(メッセージ)
→ターゲットから線を引き→ゲーム→GetPlayerPawn
・GetHealthから線を引き→HUD→DrawTexture→Texture=T_Health、ScreenH=16、TextureV=0.5、TextureVHeight=0.5、ScalePositionにチェック
→線を引きHUD→DrawTexture→Texture=T_Health、ScreenW=128、ScreenH=16、TextureUWidth=1、TextureVHeight=0.5、ScalePositionにチェック
・DrawHealthBarのinPositionから線を引き→BreakVector2D→
→Xから線を引き→それぞれのDrawTextureのScreenXに繋ぐ
→Yから線を引き→それぞれのDrawTextureのScreenYに繋ぐ
・DrawHealthBarのinScaleから線を引き→それぞれのDrawTextureのScaleに繋ぐ
(Scaleは省略されているので▼で展開する)
・GetHealthのHealthから線を引き→演算→コンバージョン→ToFloat(int)
→右から線を引き→演算→Float→float / float→下の段に100を入力
→右から線を引き→演算→Float→float * float→下の段に128
→右から線を引き→一つ目のDrawTextureのScreenWに繋ぐ
・float / floatからもう一本線を引き→一つ目のDrawTextureのTextureUWidthに繋ぐ
・イベントグラフに戻りDrawTextの右から線を引き→関数呼び出し→DrawHealthBar
→InPositionのX=490、Y=15
→InScaleから線を引き→float / floatに繋ぐ
できた!
しかしやはりダメージ計算が一発分おかしい
ひとまずこのまま進めることにする









































