投稿記事

2023年 04月の記事 (5)

わんころのUE5勉強会 2023/04/27 21:12

アイコンやヘッダを変更しました

2023-05-05 Youtube & Twitter 開設から1年が経ちます。
早いですね...
そこに先んじてアイコンやヘッダを新しいものへ変更しました。

犬の中でも特に柴犬が好きなのでそちらをベースにしたアイコンにしました。

わんころと付いてた割に犬要素はこれっぽっちもありませんでしたのでせめてアイコンくらいは...と以前から作成を予定してましたがようやく完成です!

来たる一周年に向けて振り返り動画をなんとか完成させようと思います。
UE5 の操作と VOICEVOX のセリフを合わせる必要が一切ないので動画はかなり楽に作れそうですw

間に合わせるぞーーー!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/04/25 21:05

自作ゲームの進捗10:アイテム取得とセーブ&ロード

続けてゲームの進捗報告です。
以前アイテムのセーブやロードの仕組みだけは作ってたんですがちゃんと組み込んでいませんでした。

そこで今回はキーアイテムの取得フラグを実装し、セーブとロードの仕組みを整えました。


ゲーム開始時は懐中電灯を持っていませんが、取得後にセーブしてゲームを再開すると懐中電灯を持っています。
また、ロード時に取得しているアイテムはその場から消えるようにしました。


以降は内部的な話です。

この辺りの基本機能はアイテム全般に利用するため、インタラクト可能なアイテムのベースBP にまとめておき、どのアイテムを示すのかは Enum で列挙した変数を持っているので継承先で指定するようにしています。


Game Instance にアイテム取得フラグを管理してるマップ変数が置いてあるので、EventName(Enum)を渡し、Find した結果を返します。

「Get Game Instance」から Blueprint Interface を利用する方法は以前 Stack O Bot から学んだ手法です(BPI が Game Instance へのアクセサのような役割をしてくれてます)



キーアイテムを取得した際は Game Instance への通知と、キャラクターへの通知を同時に行うようにしました。

Game Instance には Save Data Object との連動も行ってるのでそのままセーブすれば、取得したアイテムのフラグなども保存され、ロード時にその情報が利用できるようになりました。

セーブやロード周りは実際に BP を組んで試さないと分からないので黙々と BP を組むしかなかったんですが、思いのほかスムーズにプロジェクトへ統合できました。


そして、なんと!
GW に4連休があります!!!!
(しれっと有給申請したら通ってました!)


ただですねぇ...5月5日、私の YouTube チャンネルが1周年を迎えるためそれ用の動画の準備で潰れそうですw

そんな動画作ってないで他の動画はよ!というのはあるんですが1年間振り返って~の動画は作りたいと思います!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/04/22 23:46

自作ゲームの進捗09:とりあえず一室作りはじめ

先日、やりたいことが増えすぎて全然進まないという状況を危惧し、プロジェクトの縮小とそれに伴うベース用のプロジェクトを作成しました。

一ヶ月前に自作ゲーム制作進捗の報告(縮小)を行ってから特に着手はしてませんでした。

ゲーム制作の代わりにいつものサンプルを組んで勉強しておりまして、以前から取り組んでいた Enhanced Input のキーコンフィグが遂にプロトタイプですが完成しました。

動画化も予定しているので、せめてお見せできるくらいには調整したいと思ってます。こっからがほんとに大変なんですよね...

ただ次回の動画は BP のデバッグに関する簡単な紹介でもしようかなと思ってたので(恐らく)どちらかになりそうです。


進捗報告ですが、とりあえず家の中の1室というものを意識してアセットを数点配置しました。
こんな家ある?と思いながら配置をしてますが、違和感があってもきっと大丈夫でしょう!!

部屋は他にもあるんですが、とりあえずこの部屋で2-3個ほどのチュートリアルっぽいものを行って頂きながら部屋を出るというめちゃくちゃしょぼい目標を立ててます。

間もなく GW に入りますが休み希望通ってたら数日連休が出来るので作業進めたいですねーー!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/04/12 22:21

【UE5】MetaSoundで同時に鳴らす音を制限する

効果音を鳴らす際、複数の効果音を同時に鳴らすと音が重なり、数によっては音割れや爆音が発生することがあります。

例えば敵Actor を撃破した時に「Play Sound 2D」を使って撃破時の効果音を鳴らしたとします。

1体の敵であればただ効果音が鳴るだけですが、30体の敵が存在し、必殺技などで同時に撃破した場合、「Play Sound 2D」が(多分)30回呼ばれ結果的に効果音が沢山重なって凄い音が鳴ります。


今回は MetaSound を使い、最大で発生する音の数を制限する方法を記事にしてみました。

MetaSound を利用する前に


MetaSound を利用するためにはプラグインを有効にする必要があります。

メニューバー「編集」>「プラグイン」を開き、MetaSound を有効にします(プロジェクトの再起動が促されるので再起動も行います)

※ 本記事を執筆時点では MetaSound は Beta 版となってますのでご注意下さい ※

MetaSoundソースを作成


次にコンテンツブラウザで右クリックし「サウンド」>「MetaSoundソース」を選択します。

「MetaSounds」>「メタサウンド」

「サウンド」の中に別途「MetaSounds」というカテゴリがあります。そこから「メタサウンド」というものが作成できますが「MetaSoundソース」とは役割が違います。

「メタサウンド」の方はオーディオソースとしての入出力(In/Out)は存在しません。

代わりにグラフとしての入出力が提供されており、MetaSound 版の関数のような役割になっています。

例えば音にある効果を掛ける処理を「メタサウンド」で作っておき、実際に「MetaSoundソース」で利用する時にグラフ上へドラッグすると追加することができるため、処理を使いまわすような使い方が可能になってます。(マテリアル関数と同じような扱いかなと思いました)


音を鳴らす最大数を直に設定する

先程作成した「MetaSoundソース」を開き、画面上部の「ソース」をクリックします。

「ボイス管理」>「Concurrency」まで展開し "Override Concurrency" のチェックを入れます。

そうすると "Concurrency Overrides" が編集できるようになります。
ここにある最大数を設定すると音を同時に鳴らす数を制限できるようです。

この方法はその「MetaSoundソース」のみ適用されるので、他の「MetaSoundソース」と設定を共有したい場合は、サウンドの並列処理というアセットを作成することで対応可能です。


サウンドの並列処理

サウンドの並列処理(Sound Concurrency)に関しての公式ドキュメントはこちらです。

サウンド並列処理のリファレンス ガイド


コンテンツブラウザで右クリック>「サウンド」>「サウンド並列処理」をクリックし、適当な名前を付けてこれを開きます。


このアセット開くと先程の "Concurrency Overrides" の項目がアセット化されていることが確認できます。

プロジェクト全体でこの「サウンド並列処理」をデフォルトにしておく設定も可能です。(上記公式ページの「サウンド並列処理アセットを設定する」をご確認下さい)

サウンドの並列処理をMetaSoundソースにセットする


「MetaSoundソース」に戻り、「ボイス管理」>「Concurrency」まで展開し "Override Concurrency" のチェックを外した状態にすると "Concurrency Set" の [+] ボタンがクリックできます。

ここに先程作成した「サウンド並列処理」をセットすればOKです。
(ファイル名は Sound Concurrency の頭文字で SC_ をプリフィックスでつけてます)

この設定だけアセット化されているので他の「MetaSoundソース」でも同じアセットを使いまわすことも可能になりました。
その他の細かいプロパティの説明も公式サイトに記載されております。

おまけ:サウンドキュー


サウンドキューにも同じ設定があるので同じように設定可能です。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/04/10 20:34

【UE5】別Widgetを「Add Child」した後、その子Widgetを使いたい

忘れそうなので覚書きです。

はじめに

直前が切れていますが「For Each Loop」を利用し、Scroll Box へ自分で作った WidgetB(子Widget)を「Add Child」していく画像です。

複数の WidgetB が Scroll Box 内に含まれます。

その追加した WidgetB 個別の関数や変数へアクセスしたい時にどうすればいいのかよく分かりませんでした。



Scroll Box から「Get Child...」で調べるといくつかヒットしました。

「Get Children Count」

追加されている子Widget の数を取得できます。
子Widget 分ループする場合、そのまま利用すると配列の範囲外へアクセスしてしまうため -1 する必要があります。

「Get Child At」

指定したインデックスの子Widget を取得できます。
欲しい子Widget はどうやって判断すればいいのか一応確認してみました。

「Add Child」した順番に画面も並んでたので心配する必要はなさそうでしたが、「Add Child」した順番で配列[0]から入ってそうでした。

「Cast To WidgetB」

この後、WidgetB へキャストしてアクセスできました。

まだ未確認ですが、ターゲットが指定できるのなら Blueprint Interface を利用できそうです。


「Blueprint Interface」を利用してみる


適当な Blueprint Interface を作成し、WidgetB に適当な変数を「Print String」するだけの実装を行いました。

結果はそれぞれの変数の値が出力されました。
あとは WidgetB に配置した「On なんとか」系のイベントが実行されたかを WidgetA 側で判断出来たら色々便利そうな気がしなくもないんですが、これも確認出来たら追記しようと思います。


イベントディスパッチャを使う(2023-04-11追記)

前述の WidgetA で「Add Child」した WidgetB に「Onなんとか」系のイベントがあった場合、それが実行されたかを親で知ることができないかなと思い Twitter に書いたところとても丁寧にご回答頂けました!

https://twitter.com/NelisLuna/status/1645449379397111810

まさにこの通りの実装で実現が可能でした。
ネリスさん、本当にありがとうございます!!
今後絶対使うテクニックですね!!




あまり使ったことがなかったため、バインドするイベントはカスタムイベントを作成してバインドしないと駄目なんだと思ってました。

そのため、関数内でのバインドに利用できないと勝手に思い込んでたのですが、バインドするイベントから引っ張ると「Create Event」というものがあり、更に "一致する関数の作成" を選択すると、その関数をバインドすることも可能でした。

これで通知するための手段が増えたので嬉しいですね~~!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索