勉強しながら頑張ってBP組んだので、備忘録的にまとめたぞ
👇が作品
プロジェクト作成
ゲームモード サードパーソン のプロジェクトを作成する

プロジェクトにOpera House Kitを追加する

OperaHouse/Maps/Demonstration.Demonstration’のレベルが
オペラハウスのレベルなのでレベルをコピペする

いらんアクタはザンザカ消して
見せたくない舞台の後ろは、最背面の壁をコピペして前面に押し出すことで隠した(力技)
ライト調整
大分暗かったので、ライトを足してIntensityの数値を上げたりして調整


カメラを固定する
参考
正面を映すCineCameraを作成し

レベルブループリントの「BeginePlay」から伸ばして”SetViewTarget with Blend”に繋げる
ターゲットに”GetPlayerController”を繋げ

CineCameraをレベルで選択してから、レベルプループリントで右クリックで選択したカメラのリファレンスを作成できる

「SetViewTarget with Blend」の”New View Target”に正面カメラを繋げる
キャラクターをスポーンする
キャラクターをスポーンする位置と今後の判定のためにTriggerBoxを作る
TriggerBoxを配置

舞台中央に配置したTriggerBox
この位置を利用してBPキャラたちをスポーンする

TriggerBoxを選択した状態で

トリガーボックスをBP化しておく

パスを設定して、「選択」
レベル上にあるTriggerBoxをBP化してコンテンツにした

アニメーションを追加する
面白いモーションにしたかったので今回はこれ
スポーンするキャラを作成する
ブループリントでキャラを作成する

コンポーネント ‐ Mesh を選択

詳細 ‐ メッシュ に
上で入れた「The Mega Taunt Multi Pack」の”SKM_Quinn_Simple”を入れる
TauntBundle/Mannequins/Meshes/SKM_Quinn_Simple.uasset のやつ
メッシュ選ぶときオンカーソルでパスが出るので、TauntBundleのmeshにしよう

※StarterContentにも”SKM_Quinn_Simple”が入っていて、そちらを入れると「The Mega Taunt Multi Pack」のアニメーションと紐づいてないので注意
カプセルに入るように
高さを揃えて・・・


Animation - AnimationModeを[アニメーションアセット]に

Animation - Anim to play にて好きなアニメーションを設定する

設定するとビューポートのモデルが動き出す!
スポーンする
ノード”スポーンアクタ”を使う
出すのは「クラスからアクタをスポーンします」
×SpawnActor for Gameplay Taskではない

Class:にスポーンさせたいBPキャラを選択
SpawnTransform:直接座標値入れてもいいけど、目印のTrigerBoxをパーシスタントレベルから引っ張ってきて、GetActorTransformで座標決めても良いてか、おすすめ

ランダムでスポーンする
スポーンするBPキャラを複数作っておいて

Actor変数を作成

変数の方を配列にする

コンパイルして
デフォルト値を増やして、複数のBPキャラを設定

Randomノードを出す

先ほど作った変数とRandomノードスポーンアクタノードを繋げて
以下の様に

これで、スペースバーを押すたびにランダムでBPキャラがスポーンされるようになった
スポーンしたキャラとクリックの左右で正解・不正解を判定する
BPキャラのTagにfemal/manとつける
スポーンするBPキャラのタグに
Quinnなら”female”
Mannyなら”man”とつける

詳細で[tag]と打って
Tags-インデックス の場所に入れる
上のComponentTagsに入れるとこの後のHasTagノードで拾ってくれないので注意
TrigerBoxでTagの判定をしてBoolean変数に判定を移す
用意してあったTriggerBoxのBPを開く
イベントグラフには、おあつらえ向きに[イベントActorBegineOverlap]がすでにある。

キャラをスポーンするのを利用して、ActorBegineOverlapした時にTagの判定を得ることにする。
以下の様に繋ぐ

[ActorBegineOverlap]➡ActorHastagで”man”のタグを持っているか確認
”man”タグを持っていたら、ブランチTrueでOSUブーリアン変数をON
”man”タグを持っていなかったらブランチFalseへつなぎ、ActorHastagで”female”を持っているか確認
”female”タグを持っていたら、ブランチTrueでMESUブーリアン変数をON
レベルブループリントでマウスの左(オス)右(メス)がTriggerBoxに出てきた個体と合っているかを判定
長い( ^ω^)・・・

順番に説明していく
マウスの左クリック、右クリックのノードを作成
推した直後に、また判定されないよう、両方にDisableInputを噛ませる
左ボタンを押した場合、OSU_LブーリアンノードをON
右ボタンを押した場合、MESU_RブーリアンノードをON

BP_TrigerBoxをパーシスタントレベルから持ってきて
スポーンされたキャラBPがOSUかMESUのどちらだったかをゲットしてくる
スポーンされたノードと押したボタンがOSU*OSU_LならTrueで”押忍”ウィジェットを表示
スポーンされたノードと押したボタンがMESU*MESU_RならTrueで”冥忍”ウィジェットを表示

押忍ウィジェット、冥忍ウィジェット表示後、
正解のカスタムイベント”〇”につなげ
スポーンされた変数とクリックした変数がON同士にならないと
失敗のカスタムイベント”×”につないで、失敗演出につながる
ブーリアン変数をリセットし、かくしてゲームは続いていく

基本はBeginePlayから繋げたSpawn処理の後に
ブーリアン変数をリセットする
そうしないと前の判定のままになってしまう
タイトルとプレイレベルとリザルトの遷移:OpenLevel(byName)
は👇のヒストリアさんのものを参考に

3つレベルを作って

タイトルのレベルブループリントに「OpenLevel(byName)」でEnterで遷移するように

プレイレベルには失敗カスタムイベントの最後に「OpenLevel(byName)」
リザルトのレベルブループリントはタイトルと同じく「OpenLevel(byName)」で
Enterでタイトルに遷移するように

これで何順でもできるようになった
成功したカウントはInstanceBPで管理
プレイレベルとリザルトレベルのレベル間で数を管理しないといけなかったため
InstanceBPを使用
プレイレベルの変数の👀を開けてみたが、リザルトで参照できなかったため、Instanceで管理することとした。
BPーGameInstanceを追加
追加 ‐ BPクラス ‐ 「Gameinstance」で検索して追加

Instanceにカスタムイベントを作って、レベルブループリントで起動する
Instanceのブループリントでカスタムイベントを作る

👆正解したら、カウントを1つずつ足していく
レベルブループリント側で、正解したルートを通ったらInstanceのカスタムイベントに命令が行くように繋ぐ

※ちなみに、Instanceでカスタムイベントを作ると、レベルブループリント側で呼び出せたが
レベルブループリント側でカスタムイベントを作ってもInstance側では呼び出せない仕様のようだ
Widgetに数字を出す
追加ーユーザーインターフェイスーウィジェットブループリント

CanvasPanelをパレットからD&Dで追加してから(これやんないと、何も載せられなくてマジで焦る)
Textで必要なUI書いて
WidgetBPのグラフを押して
ウィジェットブループリントに移動

イベントTick ‐ Instanceを引っ張ってきて ‐ ウィジェットBPで作ったInt変数にカウントした数値を入力
WidgetBPのデザイナー画面に戻り

数字に置き換えたいテキスト選択してから
詳細ーコンテンツーテキストーバインド を押す
グラフで入力した変数を選択してバインド

ちなみにWidgetブリンク表現はこちら
WidgetBPのテキストをアニメーション追加する

WidgetBPのグラフで
PreConstructからPlayAnimation
[Num Loop to Play]を0にしてループ設定にする

参考:👇の■おまけ:文字に簡単なアニメーションをつける

今まで、既存のやり方の側だけを変えてそれっぽく作ってたけど
今回は、作りたい仕様があった上で調べたり、テストして試行錯誤して作ったので
ちょっと成長を感じます
いきなり全部作るのは大変だから
仕様ごとにテストレベルを作って1つ1つ実装していったのが感慨深かったワンね…
紹介されなかったのが残念だけど、凪は見ていたワンよ!
コメント