ゲーム開発備忘録

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

【イベント】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のフォローなどしていただけるとありがたいです。

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

投げ銭を投げる

 

【UEFN】〈Tips〉制限時間でゲームが終了する仕組みを作ろう

目次

 

はじめに

UEFNでゲームを作るとき制限時間でゲームが終了する仕組みを作るにはどうすればいいか基本的な方法を紹介します。

なおUIは異なりますが、フォートナイトクリエイティブでも同様の手順で作成できますので参考にしていただければ幸いです。

 

環境 : Version UE5.2 UEFN

 

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

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

 

解説


➀プロジェクトの作成

今回はSampleを選びました(特に指定はありません。)

 

裏でフォートナイトを立ち上げてセッションを開始します。

 

初回は少し長いですが、接続が確立されれば成功です。

うまくいかない場合はフォートナイトを再起動したりするとたいてい何とかなります。

 

②タイマーの仕掛けの設定

フォートナイトのクリエイティブ、もしくはUEFN側からタイマー仕掛けを配置します。

 

ドラッグアンドドロップして配置します。(場所はどこでもいいです)

 

タイマーの仕掛けを設定を変更します。

ゲーム開始時にスタート、インタラクト可能からチェックを外します。

 

実行するとUIが表示されてカウントダウンが始まります。

 

配置しているほうは見えなくてもいい!という場合は非表示にしましょう。

 

 

③エンドゲームの仕掛けの設定

カウントが0になったらゲームが終了するようにしましょう。

 

これにはエンドゲームの仕掛けを使います。

 

同じようにドラッグアンドドロップで配置します。

 

タイマーの仕掛けと連携させます。

 

エンドゲームの仕掛けから起動するのオプションで何によってこの機能が呼び出されるかを指定します。

今回はタイマーの仕掛けが成功したら起動するように選びましょう。

 

タイマーの仕掛けはデフォルトで終了すると成功の通知が送られるようになっています。

 

実行すると指定時間が過ぎた後にゲームが終了するロジックができました。

 

最後に

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

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

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

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

投げ銭を投げる

 

【UEFN】〈Tips〉ゲーム内のユーザーによる手動リスポーンを禁止する

目次

 

はじめに

UEFNでゲームを作るとき、ルールによっては手動によるリスポーンをしてほしくない場合があります。その場合の設定方法についてまとめておきます。

 

環境 : Version UE5.1.1 UEFN

 

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

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

 

メモ


➀アウトライナからIslandSettingsを探す

右上のアウトライナーからIslansSettingsを探します。

 

アウトライナーがない場合はウィンドウから出しましょう。

 

②手動リスポーンを許可のチェックを外す

IslandSettingsを選んだ状態で詳細のウィンドウのゲーム設定から手動リスポーンを許可のチェックを外します。

 

実行してメニューからリスポーンが消えていることを確認出来たら成功です。

 

最後に

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

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

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

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

投げ銭を投げる

 

【UE4・UE5】〈Tips〉TextBoxの大文字・小文字・数字の強要+文字数制限のやりかた

目次

 

はじめに

 

ユーザー名やパスワードの入力などで大文字だけにしたい、

数字以外使わないでほしい。

??桁以上入力しないでほしい。

そんな仕様にぶち当たった方への記事です。

 

 

環境 : UE5.1.1

 

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

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

 

解説


⓪共通

ユーザーの入力した値を受け取るOnTextChangedイベントを使って実装します。

 

➀大文字・小文字の強要

 

②文字数制限

 

③数字制限

数字の制限にはIsNumeric関数を使います。

しかしこの関数、. , + , - が含まれるという致命的な問題があるため手動で除外しています。

比較の部分を応用することで英字のみや、記号のみなど自分好みの条件を付けた操作ができます。

 

最後に

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

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

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

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

投げ銭を投げる

 

【UE4・UE5】〈Tips〉 EUW(エディタユーティリティウィジェット)で警告や確認ダイアログを出す方法

目次

 

はじめに

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

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

 

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

今回はそのツール内でダイアログを出す方法について解説します。

これを使用することで利用者の意図しない操作への警告や確認、完了などを通知することができます。

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

docs.unrealengine.com

ue5study.com

 

解説

ノードの説明

ダイアログの表示にはEUWで利用できるShowMessageDialogを利用します。

 

パラメータの説明

TitleとMessageはそのままの意味です。

 

MessageTypeには選択肢の種類を選択できます。

 

例)

Cancel Retry Continue

 

Yes No All No All Cancel

 

デフォルトの選択を設定できます。

自動化しない場合は気にしなくてもよさそう、、

 

処理の分岐について

スイッチノードを使うことで、選択したボタンによって処理分岐できます。

 

最後に

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

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

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

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

投げ銭を投げる