ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】〈Tips〉列挙型(Enum)の要素をブループリントだけでランダムに取得する方法

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

列挙型の要素をランダムで取得するハックです。

 

環境

UE5.3.0

 

解説

やりかた

今回取得したい列挙型を作ります。


取得したいところで列挙型の名前を入力し、インプット数をGetを選択

 

これにより要素数を取得できます。

 

列挙型の要素は0から始まるので1引いた値からランダムノードで取得し再び列挙型に変換することでランダムで取得できます。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE4・UE5】〈Tips〉Ambient Zone を利用して簡単に音声のブレンドをやってみよう

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

場所によってBGMの音がスムーズ切り替わるようにするには、Ambient Zoneを利用することで簡単に実現することができます。

 

あまり知られていない機能ですが非常に強力なものですので活用してみましょう。

 

 

環境

UE5.3.0

FPSサンプル

 

以下のサイトを参考に記述しました。

docs.unrealengine.com

 

解説

環境の構築

UE上で簡単な部屋を作成してこの部屋に入ったらBGMが切り替わるようにします。

わかりやすいようにMeshを編集して部屋風にしました。

 

Audio Volume の配置

音声の切り替えたい範囲 = 部屋の中を定義するために、Audio Volumeを配置します。

アクタを配置からオーディオボリュームをレベルにドラッグアンドドロップします。

 

ブラシセッティングもしくはスケールを変更して部屋の形状に合うように設定します。

 

Tips

 ブラシ形状から形状を変更できます。
指定したいエリアに応じて適切な形状を設定することができます。

 

 

Audio Volume の設定

AudioVolumeのプロパティにアンビエントゾーン設定という項目があります。

これを設定することでこのエリアに入ったとき、どのように外部と内部の音声をブレンドするかを指定できます。

 

今回は環境BGMから室内BGMに2秒かけてブレンドするような設定にしてみました。

 

Ambient Sound の配置

エリアの指定が終わったので次に音源であるAmbient Soundを配置していきます。

 

環境BGMである音源を室外に1つと、室内BGMである音源をAudio Volume中に配置します。

 

Ambient Sound の設定

AmbientSoundそれぞれに再生したい音源を設定します。

 

サウンド→詳細設定のSound Class Overrideからサウンドクラスを作成します。

 

名前はSC_Ambientとしました。

 

SC_AmbientのApplyAmbientVolumesにチェックを入れます。

 

両方のAmbeinetSoundにこのSC_Ambientを割り当てます。

 

Allow Spatializationにチェックがついているのを確認したら完成です、


音量調整はそれぞれのAmbientSoundで行います。

 

サウンドの音量調整

AudioVolumeによる音量制御と音量調整を両立する手法は以下の方法で出来ます。

これにより、移動先のエリアの音量が0の場合はZoneの設定が1でもそのまま0になります。

 

注意事項

・Volumeの計算はカメラ座標を利用しているようです。

そのためTPPの場合はキャラの位置と聞こえる範囲が変わってしまいます。

⇒こちらUnreal Engineの音を聞く位置がデフォルトでカメラの位置になっているようでした。
そのためキャラクターの位置にリスナーを更新するノードで上書きすることでこの問題を解決できるようです。

ご指摘ありがとうございました。

docs.unrealengine.com

 

・個人の環境ですが実行時にすべてのAmbient音声が一瞬再生されてしまう問題があります。

自分の環境ではデフォルトの音量を0にして遅延を入れて音量を1に設定する処理を入れることで解決しています。
解決方法をご存じの方はコメントお願いします。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE5】〈Tips〉UEの自作ツールでDetailsViewのプロパティの変更を検知する方法

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

エディタユーティリティウィジェットを利用することでエディタ上で動く独自のツールを作成することができます。

特にDetailsViewを活用することでビジュアルの向上の他に、今回紹介するプロパティの変更も検知できます。

この機能を生かして設定が変更されたときのみ処理を更新したり、設定されたデータアセットの値を反映したりといったよりフレンドリーなツールの作成を行うことができます。

エディタユーティリティについては以下のサイト様を参考にしてみてください。

docs.unrealengine.com

ue5study.com

DetailsViewについてこちら。

zenn.dev

解説

変更の検知方法

EUWのDetailsViewの詳細から

 

デリゲートでOnPropertyChangedを追加することができます。

OnPropertyChangedの使い方

PropertyNameからはAssetActionUtilityで変化した変数の名前を取得できるので、Switchなどで更新処理を書くことができます。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE5】〈Tips〉Overlayマテリアルが表示されない原因と解決

目次

 

はじめに

キャラクターのアウトラインを表示するのに便利なOverlayマテリアルですが、動作しないことがあったので原因を探しました。

 

Overlayマテリアルの使い方はわかりやすいヒストリアさんの記事をお読みください。

historia.co.jp

 

環境 : UE5.2.1

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

解説


原因

Naniteサポートを有効化

Nanaiteサポートが有効だとOverlayマテリアルの計算がされないようです。

解決

問題のあるメッシュを開き、Naniteサポートを有効化チェックを外して「変更を適用」を押します。

 

表示されるようになりました。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【イベント】UE Tokyo .dev #1 に UEFN ネタで登壇した話

目次

 

はじめに


運営に携わってきたUEのコミュニティイベント【UE Tokyo .dev #1】が7/28日に開催されました。

初回ということもあり機材トラブルが多く発生する中、

配信・現地問わず多くの方が参加してくださり非常に感謝しています。

心残りはあるものの他の運営の方々にも支えられ何とか終了まで走り切ることができてうれしく思います。

ue-community-tokyo.connpass.com

 

登壇したスライドはドクセルで無料公開しております。

どうしてUEFNネタで登壇したか


フォートナイトクリエイティブで活動されてきた方など、コンテンツを作ってきたがゲームエンジン自体にそこまで触れてこなかった人々に向けて発信しようと思いました。


個人的にはUEをずっと触ってきてまだまだ、UEFNの不自由さを体感している側の人間なので、Unreal Engine ならもっといろいろできるからやってみない?みたいなUEFNをきっかけにUEでのコンテンツ開発の自由度や楽しさを知ってほしかったというのが大きいです。

 

UEを布教するための構成

そのためにも内容では UEFN だと大変な作業でも UE なら自動化できるよ!みたいな構成を行い、まずはUEをUEFN開発ツールとして紹介出来たらいいかもと思いこのような構成にしました。

 

ぜひこのスライドをきっかけでUnreal Engineに挑戦する人が増えて、コミュニティが盛り上がるとうれしいです。

 

最後に

Unreal Engineはいいぞ。

UE始めたての頃に3周したUE極め本のUE5版が発売間近です。
これ一冊で幅広くUEの基礎は固められるのでぜひ購入してみてください。

 

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UEFN】〈Tips〉Failed to stage project modules with errors Total upload size is too large の直しかた

目次

 

はじめに

UEFNでゲームを作るとき何も考えずにアセットを入れると以下のようなErrorが出てセッションが起動できなくなる場合があります。対応が大変だったので、修正方法についてまとめます。

 

環境 : Version UE5.2 UEFN

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

解説


➀原因

使っているアセットがでかすぎます!

 

外部からアセットを直接読み込むと陥りやすい現象です。

 

プロジェクト→プロジェクトのサイズからどのくらい使っているか確認できます。


使用できるサイズを超えるとタイトルのエラーになります。

 

そして、たいていの場合は解像度の高いテクスチャが一番の原因になっていることが多いです。

 

②やばそうなアセットを探そう


最大のアイテムを基準と、パッケージ別を選択することで、何が大きいかを調べることができます。0.5MBを超えるアセットは危険です。

 

いざ、深淵をのぞきに行きます。

 

テクスチャの場合、その解像度の高さが原因となります。

 

③テクスチャを圧縮する

でかいサイズのアセットを圧縮します。

通常のUnrealEngineであればパッケージングをLocalで行うので、最大テクスチャサイズを設定するだけで完了しますが、UEFN上ではuassetをアップロードしているのでこれだけではErrorが出てしまいます(エディタはテクスチャサイズの可逆性を担保する必要があるため)。解像度が落ちてしまいますが2K以上のテクスチャの読み込みをUEFNが禁止しているので割り切って圧縮しましょう。

圧縮は非常に大変なので、本当にそのテクスチャは使わないといけないのか?検討することも大切です。

 

そのため一度テクスチャをpngで出力して圧縮して再インポートしなければなりません。該当のやばいテクスチャを右クリックバルクエクスポートをすることでまとめて出力できます。

 

外部のペイントツールなどを利用して画像を1024や512を目安に圧縮(リサイズ)します。

非可逆圧縮になってしまうのでオリジナルデータのバックアップを取っておきましょう。圧縮したら、圧縮前と同名のテクスチャで書き出しましょう。

 

2048×2048から1024×1024に抑えるだけで13MBから3MBまで軽量化することができました。

 

画像の圧縮が完了したらUnrealEnigneに書き戻します。

該当のテクスチャがあるコンテンツフォルダで同名のアセットを入れると上書きすることができます。

 

これによりマテリアルなどの参照はそのままにテクスチャ圧縮によるuassetのサイズを軽量化できます。

 

これを繰り返してアップロードサイズ範囲内になるまでアセットを軽量化しましょう。

メッシュの場合はDCCツールでリメッシュする必要があります。UVが破綻してテクスチャが利用できなくなったりするため、やや上級者向けです。

 

参考資料

forums.unrealengine.com

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE4・UE5】〈Tips〉指定した範囲内でランダムにスポーンする仕組みを作ってみよう

目次

 

はじめに

 

ゲームでは指定した範囲内でランダムに位置を取得してスポーンする仕組みを作ってみます。

入門者向けに詳しく説明しているので結論が知りたい!という方は⑤ランダムにスポーンする処理からお読みください。

 

環境 : UE5.2.0

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

解説


➀生成用のアクタの作成

コンテンツブラウザ右クリックしてブループリントクラスを作成します。


親クラスにActorを指定します。

 

名前をB_RandomAreaSpawnerとしました。

 

コンポーネントの追加

スポーンする範囲を指定するためのコンポーネントを追加します。

作成したアクタを開き、コンポーネントの追加からBoxCollisionを追加します。

 

Boxドラッグアンドドロップして新規ルートにします。

 

こうなったらOK。

 

このコンポーネントは範囲を指定するためだけに使いたいので、コンポーネントの詳細からコリジョンプリセットをNoCollisionにします。

 

実行中でも確認できるようにHidden in Gameのチェックを外しておきます。

 

レベルに配置して、実行し、コリジョンが表示されていれば成功です。

 

③スポーンするアクタの作成

スポーンするアクタを作成します。

スポーンするものが決まっている方はスキップしても構いません。

 

コンテンツブラウザ右クリックしてブループリントクラスを作成

 

親クラスにStaticMeshActorを選びます。

 

名前をB_SpawnActorにします。

 

StaticMeshComponentの詳細からConeを選びます。

保存して完了です。

 

④スポーン処理の作成

B_RandomAreaSpawnerに戻りイベントグラフからカスタムイベントを追加します。

 

名前をSpawnとしました。

 

SpawnActorノードを配置します。

 

生成するClassにB_SpawnActorを選びます。

 

Transformが空だとエラーをはくのでBoxの位置にスポーンするようにします。

 

またスケールが大きすぎるので0.1にしておきます。

 

BeginPlayから作成したSpawnイベントを接続します。

 

実行して真ん中にスポーンしていれば成功です。

 

⑤ランダムにスポーンする処理

Spawnイベントを修正します。

特定のボックスの範囲からランダムな位置を取得するにRandomPointinBoundingBoxを利用します。

BoxコンポーネントのBoxExtentを取得してHalfSizeに接続します。

 

BoxExtentはBoxコンポーネントの形状から編集できます。

 

形状のLineTicknessの値をあげることで線の太さを変えることができます

 

これで範囲内のランダムなポイントで生成できるようになりました。

 

⑥一定間隔でスポーンする

SetTimerbyEventを利用して0.2秒ごとにSpawnイベントを呼ぶようにします。

 

このままだと無限に生成してしまいメモリがあふれてしまうので、B_SpawnActorに一定時間で自身を消す仕組みを入れておきます。

B_SpawnActorのイベントに5秒たったらDestroyActorを呼びます。

 

実行すると0.2秒おきに範囲の中にランダムにスポーンします。

 

BoxExtentの値を変更するとスポーンする範囲を制御できます。

 

Hidden in Gameのチェックを戻せばゲーム中のコリジョンが非表示になります。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる