へきらくおきらく

Unreal EngineやSingle Board Computerでのゲーム開発メモ

Unreal EngineにBacktraceを導入してクラッシュレポートを管理!簡単にクラッシュできるおまけつき!

Calendar for Unreal Engine (UE) | Advent Calendar 2021 - Qiita

パート3の14日目です!

昨日はminami_kohさんの「[UE4] 具体的な実装例から知るマルチプレイヤーゲーム実装の基本のキ - Qiita」でした。

 

本日はどうぞよろしくおねがいいたします。

 

記事の目的・概要

Backtrace GameJam に参加しました。次回のBacktrace GameJam開催時には参加してくれる人が増えたらいいなと思いましたので、読んだ人がスムーズにBacktrace設定でき、一瞬でゲームクラッシュさせ、クラッシュレポートを上げられるようにします。

記事の主な対象の方としては、ゲームジャムに興味のある方、できればUnreal Engine 用に Visual Studio をセットアップするなどを行いパッケージングやC++コードのビルドができる状態であると理解しやすいと思います。

Unreal Engineのバージョンは4.27.2を使用します。

流れはこんな感じです。

  • BacktraceをUnreal Engineに導入
  • プロジェクト設定のフローを説明
  • クラッシュさせて、web管理画面を眺めてみます

Backtraceとは

クラッシュ・例外などを収集して管理できるツールです。

マルチプラットフォーム対応。

Backtrace GameJamとは

「期間内にBacktraceを導入してクラッシュレポートを上げること」という条件付きの変わったゲームジャムです。

ゲームジャムが何かという方はおググりください→ゲームジャム - Wikipedia

第3回が12/3~5の制作期間で行われ、「IT'S NOT A BUG」というBacktraceらしいテーマで開催されました。

作ったゲーム

少女からは見えない幽霊(テーマ回収)を操作して、明かりを消したり物を動かして驚かせ、少女がだんだんハイな気分になっていくものを作りました。

waka2ya.itch.io


itch.ioなどのゲームジャムに一緒に参加してくれる方・・・なにとぞ・・・

 

覚えておくとよい用語

トークンが2つあるということを覚えてください。読み飛ばしていただいてヨシ!

  • Subdomein(universe、REALMと書かれていることも。統一してほしい!)
    • アカウントのURL。アカウント作成時に決めます。
      • https://<Subdomein>.sp.backtrace.io という管理画面となります。
  • Project
    • プロジェクトは管理上の単位です。ゲームタイトルと同じと思ってよいかな。以下2つのトークンを複数発行して紐付かせるためのものです。
  • submission token(送信トークン)
    • https://unreal.backtrace.io/post//<submission token>
      • という感じのURLを使ってゲームクラッシュ時に送信します。
    • プロジェクトに対して複数発行でき、トークン毎に有効、無効を切り替えられます。ゲームのアップデートなどで切り替え管理するのが便利そうです。
  • symbol token(シンボルトークン)
    • Backtraceサーバにシンボルをアップロードするための文字列で、パッケージの後半でbacktrace_post_build.exeというプログラムに対して渡すものです。
    • .uprojectに書き込まれます。(Windows向けはエディタ上で設定できます。)

Backtrace側設定

アカウント・プロジェクト作成

f:id:wakanya:20211212033849p:plain

 

  • Subdomeinが管理画面やエラー送信時のURLに使用されます。
    • はずかしい文字列はやめようね
  • Usernameは、最初のAdmin(管理者)ユーザになります。

f:id:wakanya:20211212034020p:plain

 

  • 管理者ユーザのパスワード設定です。

f:id:wakanya:20211212035028p:plain  f:id:wakanya:20211212035102p:plain

 

f:id:wakanya:20211212035141p:plain

 

  • ようこそされるので、Project名を入力します

f:id:wakanya:20211212035434p:plain  f:id:wakanya:20211212035504p:plain

 

  • この画面になります。Unrealのボタンを押したいところですが、とりあえずこの記事を読み進めてください。

f:id:wakanya:20211212035704p:plain

 

  • ちなみに、左上やURLでプロジェクト名がわかります。

f:id:wakanya:20211213223321p:plain

 

  • 新しく別のプロジェクトを作りたい場合は、右上のアカウントを押して、
    • 「プロジェクトを作成」を選択します。

f:id:wakanya:20211212040411p:plain

 

送信トークンを準備

submission tokenを用意します。

  • 設定画面に居ない場合はアカウントの部分を押して「プロジェクト設定」に移動

f:id:wakanya:20211212040813p:plain

 

  • 左側から「エラー送信」を押し、送信トークンを確認します。
  • メモ帳かどこかにコピーしておきましょう。

f:id:wakanya:20211212040928p:plain

 

  • トークンがない場合は、右側の(+)を押して、作成します。

f:id:wakanya:20211212041121p:plain

 

シンボルトークンを準備

symbol tokenを用意します。

  • 設定画面の左側より、「シンボル」 > 「アクセストークン」を選択。
  • トークンがなければ、右側の(+)ボタンを押して作成します。

f:id:wakanya:20211212161941p:plain

 

  • コピーしてメモ帳に控えておきましょう。

f:id:wakanya:20211212162133p:plain

 

Backtrace側の設定は以上になります。

Unreal Engineプロジェクト側設定

プラグイン入手とプロジェクト作成

Backtrace Crash Reporting Plugin in Code Plugins - UE Marketplace

 

  • EpicGamesLauncherより、プラグインをダウンロードしてきます。エンジンにインストールしますが、後にプロジェクト側に持ってきます。

f:id:wakanya:20211212173044p:plain

 

  • プラグインをインストールしたエンジンで、新規プロジェクトを作成します。
  • C++プロジェクトで作成してください。(写真はUE4.27)

f:id:wakanya:20211212173300p:plain

 

クラッシュレポーターを含めるようにする

  • Edit(編集) > Project Settingsを開きます。

f:id:wakanya:20211212175420p:plain

 

  • Packaging項目のInclude Crash Reporterにチェックを入れます。これでクラッシュレポーターが含まれます。

f:id:wakanya:20211212175056p:plain

 

エディタ上でBacktraceプラグインを有効化し、設定を適用

  • エディタが起動したら、Backtraceプラグインを有効にするため、Edit > Pluginsを開きます。

f:id:wakanya:20211212173403p:plain

 

  • 検索窓に「Backtrace」などと打ち、Backtraceプラグインを見つけて有効(Enabled)します。エディタの再起動を促されるので、再起動します。

f:id:wakanya:20211212173502p:plain

 

  • エディタを再起動すると、Edit > Backtraceを選択できるので選択します。

f:id:wakanya:20211212173644p:plain

 

  • ↓のようなウィンドウが立ち上がります。すでにアカウントを作成しているので、「I have an account」を選択します。

f:id:wakanya:20211212173703p:plain

 

  • 「Instance sub-domain」には作成したSubdomein、「Project name」も最初に作成したものを入れます。(Project nameの情報必要・・・?)

f:id:wakanya:20211212173759p:plain

 

  • 次に、送信トークン(submission token)を聞かれるので、メモっておいた送信トークンを入力します。

f:id:wakanya:20211212173942p:plain

 

  • 続いて、シンボルトークン(symbol token)です。送信トークンとシンボルトークンは別ですので、お間違いのないように。

f:id:wakanya:20211212174621p:plain

 

  • 最後に、これでええのんか?と聞かれるのでチェックはつけずに進みます。
    • もう一度Backtrace設定を開くとこの画面になるので、ここで編集できます。

f:id:wakanya:20211212175819p:plain

 

  • エディタでの設定は以上です。これでパッケージングをすればOK・・・

とはなりません。????

f:id:wakanya:20211212180139p:plain

ズコー

  • パッケージングに失敗しますので通るように作業していきます。

パッケージングのfix

エディタ上で設定すると、プロジェクト側のPlugins以下に

Plugins\BacktraceIntegration\Source\BacktraceBlueprintLibrary\Private\BacktraceUserSettings.hというソースが生成されるのですが、

エンジン側にインストールされたプラグインにも同様のソースがあり、役割が重複しています。

なので、プロジェクト側にもってきて解決します。

Windows以外のプラットフォームはわかりませんが、エンジン側にプラグインインストールする設定になっているの、間違いなんじゃないかな・・・)

エンジン側のプラグイン場所特定

  • ランチャー版エンジンの場合は、ショートカットを作ってプロパティを見てみます。

f:id:wakanya:20211212181951p:plain

 

f:id:wakanya:20211212182554p:plain

 

  • UE_4.27\Engine\Plugins\Marketplaceに、「BacktraceIntegration」があるので、これを「切り取り」します。

f:id:wakanya:20211212182616p:plain

  • 自分のプロジェクト側のPluginsにも「BacktraceIntegration」があるので、ここにペーストします。ただし、ファイルの置き換えはしないでください。プロジェクトにある方のファイルが新しいので。

f:id:wakanya:20211212182917p:plain

 

  • エンジン側に残るものが気になるなら、EpicGamesLauncherからプラグインをアンインストールしておきます。「Installed Plugins」を開きます。

f:id:wakanya:20211212183347p:plain

 

  • Backtraceを「Remove」しておきます。

f:id:wakanya:20211212183435p:plain

 

  • Plugins\Marketplace\BacktraceIntegration\Source\以下に手を入れます。
  • BacktraceBlueprintLibrary\BacktraceBlueprintLibrary.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceBlueprintLibrary");
            }
        }
    }
     
  • BacktraceIntegration\BacktraceIntegration.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceIntegration");
            }
        }
    }
     
  • BacktraceSettingsLibrary\BacktraceSettingsLibrary.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceSettingsLibrary");
            }
        }
    }

 

プロジェクトをビルド

ここからはいつもどおりです。

f:id:wakanya:20211212183856p:plain

 

f:id:wakanya:20211212184923p:plain

 

ビルドが通っていれば、Windowsパッケージングでエラーを上げる準備が整いました!

 

クラッシュさせる

※クラッシュについては特に自己責任で実行をおねがいします。

C++ならぬるぽで一撃ですが、Blueprintを書いてゲームをクラッシュさせるのは意外と難しいです。(簡単に落とせる方法ご存じの方おりましたら教えて下さい。。)

  • 手段①:Create Render Target 2Dノードを使いまくる
    • 画面が固まってじわじわPCも固まってゲームクラッシュ後復帰します。

f:id:wakanya:20211212185252p:plain

 

マシンによってはクラッシュまで時間がかかりますので、

快適に自爆できるプラグインを用意しました。

github.com

 

  • Download Zipして、

f:id:wakanya:20211212191125p:plain

 

  • 解凍し、「UnrealCrash-main」をプロジェクトのPluginsフォルダに配置してください。(-mainは消してもいいです)

f:id:wakanya:20211212191318p:plain

 

  • 再度Generateし、ビルドしましょう。

f:id:wakanya:20211212183856p:plain

f:id:wakanya:20211212184923p:plain

 

  • エディタを開き、自爆用関数を呼び出すようにします。
    • 「UnrealCrashNullPtr」を用意してあるのでご利用ください。

f:id:wakanya:20211212191517p:plain

 

  • パッケージングを実行します。File > Package Project > Windowsを選択し、出力フォルダを選択してパッケージングを始めます。

f:id:wakanya:20211212192858p:plain

 

  • パッケージングの後半で、シンボルをアップロードするシーケンスが挟まります。
    • 設定したシンボルトークンが表示されています。
    • (シンボルトークンを設定していなくても上げようとします。.uprojectにPostBuildStepsが書き込まれています。)

f:id:wakanya:20211212193546p:plain

 

クラッシュレポートを送信し、管理画面で確認してみる

ゲームのクラッシュ

  • パッケージングされたゲームを起動し、自爆関数のタイミングまで進めてください。
  • クラッシュ時にクラッシュレポーターが立ち上がるので、送信します。

f:id:wakanya:20211212194950p:plain

 

トリアージ画面を確認

  • 設定画面にいる場合は、左上のロゴマークをクリックして、トリアージ画面にします。
  • クラッシュレポートが上がっていれば、エラー項目が増えているはずです。

f:id:wakanya:20211212195203p:plain

 

ここまでで、Backtrace GameJamにおける「Backtraceを導入してクラッシュレポートを上げること」はクリアとなります。

次回のBacktrace GameJamへの参加敷居をだいぶ下げられたと思います。

開催されればですが。。

 

おまけ

以降は記事の目的(設定とクラッシュレポート上げまで)より先に進んだ内容です。

Backtrace管理画面でどんな感じに見える?

  • 試しに起動後5秒でクラッシュするWindowsパッケージを3回実行してみました。
  • エラーの列に、3と表示されています。同じエラーと判断され、グルーピングしてくれてるみたいですね。
  • 次に、デバッグ(またはFingerprintの虫マーク)をクリックしてみます。

f:id:wakanya:20211213021508p:plain

 

  • コールスタックなどの詳細を見ることができます。Crashさせる関数を呼んでいるのが丸わかりです。

f:id:wakanya:20211213022118p:plain

 

youtu.be

 

  • 次に概要タブを開くと、このプロジェクトの全体でプラットフォームやエラーの種類についての割合を見ることができます。

   Androidにも導入してみました(公式ドキュメントに従うので今回は割愛)。

f:id:wakanya:20211213023206g:plain

 

Itch.ioのゲームジャムについて

見つけ方

一覧から探します:Game jams - itch.io

無数に開催されています。私はよく一覧の「Featured Jams」より人気だったりするイベントのコンセプトを眺めて、こんなゲーム作りたいなぁと妄想するのが好きです。

 

また、Forumのイベント告知カテゴリで、定期的なEpic公式の「Epic MegaJam」についての情報が上がります。

Latest Events topics - Unreal Engine Forums

「Epic MegaJam」もitch.io上で行われ、多くのゲームが投稿されます。

2021 Epic MegaJam - itch.io

 

itch.io上へのゲームの投稿について

多くの人にプレイしてもらう、ということであればWeb上で実行できるものが望ましいです。

しかしitch.io上で動かせるHTML5形式のUnreal Engineバージョンは、おそらくUE4.23が最大だと思います。

4.24以降のコミュニティバージョンを動かすは、どうやらitch.io側の対応が必要のようですが、望み薄かなと思っています。

Cross-Origin Isolation to unblock WASM SharedArrayBuffers? - Questions & Support - itch.io

(これを見越して、今回私は4.23で作成し始めましたが、HTML5形式でのライティング表現が間に合わず、結局Windows形式オンリーになりました(泣) )

 

おわりに

こんな長い記事を読んでくださりありがとうございます。

ゲームジャム中はゲームを作る方に夢中で管理画面をじっくり見る余裕がなかったので、振り返れてよかったです。

itch.ioなどのゲームジャムに一緒に参加してくれる方・・・なにとぞ・・・

 

明日はso2さんの「初心者による猫でもわかるシリーズのまとめ的な記事」です。ねこになりたい!ニャー!!

 

Calendar for Unreal Engine (UE) | Advent Calendar 2021 - Qiita

Tinyなパッケージに挑戦してみよう

Unreal Engine 4 (UE4) その2 Advent Calendar 2020
23日目です。

UE4で100MB未満のWindowsパッケージを作ろうという記事です。

UE4.26.0をベースに書いています。また、エディタの画像は言語が英語です。

f:id:wakanya:20201222215111p:plain

 

何回もプロジェクトのパッケージを行っている方には見慣れた内容かと思います。

目次:

1. なぜ100MBなのか

制限プレイが好きだからです

Epic Games主催のゲームジャム(直近は:2020 Epic MegaJam)において、

「パッケージサイズが100MB未満のゲーム」とうModifierカテゴリが設けられています。

例えば、2019 Epic MegaJamのThe Tiny Awardを受賞したタイトルはこちらです。

The Cat-Earth Society

 

設けられるカテゴリの種類は毎回同じではありませんが、

TINY AWARDについては常設されているように見えます。

その他XRゲームや、Houdiniを活用したModifierカテゴリが最近の流行りのようです。

 

今回はこのTiny Award向けとして活用できるように、

基礎編はBlankプロジェクトを100MB未満に小さくするパッケージング設定。

応用編はコンテンツ追加をしながら100MB未満キープするためのTipsを紹介します。 

 

ゲーム制作はいつでも制限がつきものです。

提示された制限内でコンテンツを制作できます。と言えることは素敵なことで、

制限に挑戦することは価値ある経験だと思います。  制限プレイは楽しい

 

軽量化するための全ての手段を紹介するという趣旨ではありません。

主観ですが、触りやすい部分を挙げてみようと思います。

「こういう方法もあるよ!」という知見や魔術をお持ちの方は、

ぜひブログなどで共有していただけたらと思います。

1.1. UE4で100MBのパッケージってどんな感覚?

試しに簡単なプロジェクトのパッケージサイズを確認します。

↓ ① Third PersonテンプレートをStarterContent無しで作成しました(UE4.26.0)。
  ② Packaging で Shipping(出荷用) 設定にだけしておきます。
  ③ パッケージングを実行してみます。今回はWindows(64bit)向けパッケージを作成。
  ④ できました。サイズを確認しましょう。

f:id:wakanya:20201218090119p:plain

「グレイマンしか居ませんが242MB?、100MB未満のゲームは魔法でも使っている・・・?(2019の受賞作品マジやばくね?)」

自分も最初は簡単には無理なのではと思いましたが、

以下の内容を見てしまえば収めることは容易です。

※今回はディスク上のサイズではなく、上のサイズの値で話を進めることにします。

2. 基礎編:スタートラインに立つための設定

パッケージング時の設定や、使用しないものを削ぎ落とすことで

エンジン側に手を入れることなく100MB未満にすることができます。

 

まず、プロジェクトが空の状態で色々変えてみましょう。

↓ Blankプロジェクト(4.26.0)を新規作成し、Shippingにした状態は、

 およそ203MBでした。

f:id:wakanya:20201218090247p:plain

基礎編ではこのサイズ(203MB)を基準に、効果の高い設定を順番に紹介します。

組み合わせによっては不要となる設定もありますので、

手元で取捨選択を色々試すことが良い100MB未満プロジェクトに繋がると思います。

2.1. 圧縮コンテンツの使用

↓ Project Setting > Packagingより、
 「Create compressed cooked packages」をTrue

f:id:wakanya:20201218090333p:plain

 

↓ 203MB ⇒ 157MBになりました。

f:id:wakanya:20201218090346p:plain

2.2. prerequisites installerを含めない

再配布可のwindowsコンポーネントなどを含めるかどうかについて、オフにすることができます。通常のゲームにおいてはオンにしておくのが親切かと思いますが、

今回のように100MB以下のゲームを好んで実行するようなユーザには既に不要とも考えられますので、除外してみましょう。

(※itch.ioなどに投稿する場合は、含めたバージョンと含めないバージョンを作成して、両方アップロードするとより親切です。)

↓ Project Setting > Packagingより、
 「Prerequisites > include prerequisites installer」をfalse。

f:id:wakanya:20201218234054p:plain

 

↓ 203MB ⇒ 164MBになりました。

f:id:wakanya:20201218234103p:plain

2.3. 32bitパッケージの利用

Windows向けのパッケージングについて、32bit版のほうが容量が小さくなります。

UE4.26はデフォルトで32bitパッケージが無効になっており、64bitしか選択できませんので、32bitパッケージを有効にする設定を紹介します。

 

UE4.26のパッケージ選択肢です。デフォルトでは32bitがありません。

f:id:wakanya:20201218090457p:plain

 

では、有効にします。

↓ Configフォルダの中から、「DefaultEngine.ini」を開きます。

f:id:wakanya:20201218090524p:plain

 

↓ DefaultEngine.iniに以下の文を記述し保存します。適用はプロジェクトを再起動します。

[/Script/WindowsTargetPlatform.WindowsTargetSettings]

bTarget32Bit=true

 

↓ 末尾にでも追加しましょう。保存を忘れずに。

f:id:wakanya:20201218090543p:plain

↓ プロジェクトを再起動すると、32bitのビルド選択肢のみ出現します。

f:id:wakanya:20201218090559p:plain

↓ 203MB ⇒ 169MBになりました。

f:id:wakanya:20201218090617p:plain

2.3.1. 補足:32bitなぜデフォルトで選べなくなった? 

 

表題から逸れるので折りたたみました

UE4.25リリースノートにあるように、
 ロード時間改善機能(10-20%の改善って凄まじい)を追加した結果、
 Win64とWin32環境でデータの互換性が失われてしまったためです。
 さらに32bitアプリは非推奨として進める方針であることも記述されています。
Cooked Data Compatibility
Unreal Engine 4.25 includes some major serialization changes to improve load times. A side effect of these changes is that cooked data is no longer compatible between Win32 and Win64 executables. Projects will need to cook two sets of data to support both build types. However, 64bit Windows will still run Win32 executables so shipping only a Win32 version could be an option for some projects that wish to support 32 bit Windows.

Load Time Improvements
Depending on the platform, users may experience a 10-20% load time improvement because of UObject optimizations, general rendering and physics optimizations, and low overhead serialization for materials and shaders.

Win32 Support
We are officially deprecating our Win32 support. It will be included in Unreal Engine 4.25 and Unreal Engine 4.26, but support for 32-bit Windows operating systems will be removed in a future release.

またUE4.26リリースノートでは、
 64bitか32bitどちらかしか選べないようにしました。と記述されています。
New: Changed the File|Package menu for Windows to only show 32 or 64-bit options, based on the bTarget32Bit Windows project setting. It now won't cook with Win64 but run with Win32.

2.3.2. さらに補足:設定方法の調べ方

なんとUnreal Engine 4のソースは無料!それっぽいワードで追っていけばいずれ辿り着けます。

↓ 「\Engine\Config\Windows\DataDrivenPlatformInfo.ini」にFreezing_b32Bitという項目があって、
 「bTarget32Bit」という変数らしきものが怪しい!

f:id:wakanya:20201218091958p:plain


↓ 「Engine\Config\BaseEngine.ini」ベースの設定ファイルで無効になっているから、
 プロジェクトでもそのまま無効になっているということなんだね!

f:id:wakanya:20201218092008p:plain

補足おわり

 

2.4. エディタのコンテンツを除外

↓ Project Setting > Packagingより、

 「Exclude editor content when cooking」をTrue

f:id:wakanya:20201218092033p:plain

 

↓ 203MB ⇒ 199MBになりました。

f:id:wakanya:20201218092045p:plain

 

2.5. 使用しないPluginの無効化

↓ 基礎編の設定を全て適用するとギリギリ100MBに収まります(UE4.26.0)が、

 これではコンテンツが入りません。

f:id:wakanya:20201219003826p:plain

この項ではこのサイズ(99.9MB)を基準とします。

 

ゲームで使用しないプラグインなどを外します。

ゲームで使用するか否かはゲームの企画によって選択する必要があり、

ここでは判断するための手法を紹介します。

 

サイズが大きいプラグインはどれでしょうか?

↓ 調査のため、「UsePak File」をOFFにしてパッケージングしてみます。

 度々確認するため別のフォルダにとっておくのをおすすめします。

f:id:wakanya:20201219004649p:plain

↓ ①パッケージングされたフォルダ内のEngine側Pluginsフォルダ以下について、

 ②「.u」などで検索し、サイズ順に並べます。

f:id:wakanya:20201219005136p:plain

SpeedTreeImporter内のコンテンツが大きいので、外してみましょう。

↓ Edit > PluginsからPluginマネージャを開きます。

f:id:wakanya:20201219005332p:plain

 

↓ Allの部分を選択し、右上の検索窓に入力して「SpeedTree Importer」を探します。

 EnabledをOFFにしましょう。

f:id:wakanya:20201219005547p:plain

 

↓ 「UsePak File」の設定をTrueに戻してパッケージング。

 99.9MB ⇒ 96.3MBに減らせました。

f:id:wakanya:20201219010204p:plain

サイズを抑えるように意識していれば(応用編の内容)、

ここからでもゲームにできます。が、もうちょっと減らしてテクスチャやサウンドコンテンツを入れるための余裕を持ちたいです。

 

↓ 先程の「UsePak File」を外したパッケージについて、

 ①Engineフォルダを開き、

 ②.dllなどで検索し、サイズ順に並べます。

f:id:wakanya:20201219011627p:plain

OVRPlugin:Oculusを使用するVRゲーム向けライブラリのサイズが大きいです。

コンテストにはXRのカテゴリもあるので狙うなら入れておくべきですが、

企画においてVRゲームにならないなら外すことで大きく容量を稼げます。

↓ 「VR」などで検索するとOculusやSteamVRがオンになっているので、外してみます。

f:id:wakanya:20201219012307p:plain

 

↓ SpeedTree、Oculus、SteamVRを外しました。

 99.9MB ⇒ 92.0MB。8MBと、かなり余裕ができました(個人の主観です)。

f:id:wakanya:20201219012811p:plain

さらに使用しないPluginを外していくことでサイズを小さくしていくことができます。例えば追加で「Chaos Niagara」、「Niagara」を外すと90MB未満にすらできます。Niagaraコンテンツを含んでも100MB未満は達成できますので最初から選択肢を狭めなくてよいと思います。むしろ含んで最新機能付き制限プレイをしよう

また、何でもかんでも外してエディタ用のプラグインなども外すと開発し辛くなってしまいますので気をつけてください。「Asset Manager Editor」などは元々パッケージに含まれないので外してもパッケージサイズの削減には効果無い上、Reference Viewerなどが使えなくなってしまいます。

3. 応用編:各種Tips

パッケージサイズが変わりやすい部分について紹介します。

ここの内容を把握できていれば、ゲームコンテンツを追加しても100MBに収めることは苦行ではない思います。

ただし、都度パッケージングしてみてサイズを確認することをおすすめします。

いつのまにか大きいサイズのテクスチャを参照して一気に増えてしまった、ということも度々あるでしょう。

 

圧縮設定についてはランタイムの挙動やコンテンツのクオリティが変化しますので、

変更を加えた後にパッケージングゲームを動かして確認することを徹底しましょう。

3.1. テクスチャの圧縮設定、Mip設定

↓ テクスチャアセットを開くと、サウンド同様にCompression Settingsがあります。

 またDetailsの上部には、Resource SizeとMipmapの数が表示されます。

 Compression SettingsやMipsの設定を変更するとResource Sizeが変わります。

f:id:wakanya:20201220080152p:plain

※Resource Sizeはパッケージ時のサイズではないですが、

 設定による変化の目安に使用できます。

 

↓ Mipmapの設定は直接NoMipmapなどを設定するか、

 Texture Groupから判定されるようになっています。変更した場合にResource Sizeや

 Number of Mipsの値が変わることを確認してください。

f:id:wakanya:20201220080206p:plain

 

↓ 2048*2048のアルファ付きテクスチャ1枚入れたときのパッケージサイズの変化です。

f:id:wakanya:20201220085005p:plain

↑ ロゴや字を綺麗に出すためにUserInterface2Dにした場合などは注意しましょう。

 

テクスチャの設定についてのより詳細な内容はこちら↓をご覧ください。

今回の目的の場合、特にテクスチャを4の倍数サイズにすることが重要です。

そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streamin…

3.2. サウンドコンテンツの圧縮設定

パッケージ時サイズを変更しやすいコンテンツとしてサウンドがあります。

↓ 例えば、約7MBのBGMを用意してみました。

f:id:wakanya:20201219211616p:plain

UE4にインポートするとこのようにSoundWaveコンテンツになります。

f:id:wakanya:20201219211324p:plain

 

↓ ダブルクリックなどで開き、Quality > Compressionという項目に注目します。

 デフォルトが40に設定されていることがわかります。

f:id:wakanya:20201219211825p:plain

↓ Compressionを色々変えてパッケージしたサイズ結果がこちらです。

 元ソースが7MB近くありましたが、デフォルトの状態でも1MBすら増えていません。

f:id:wakanya:20201219211901p:plain

↑ 1と100の設定間で、サイズに1MB以上の違いがあります。

 10MB程度の中でやりくりすることを考えると大きな差です。

 

実際にパッケージされたゲームの音を確認しながら、

サイズが100MBに溢れないよう調節してください。

3.3. パッケージに含める/含めないマップ、フォルダの指定

これは通常のプロダクトでも同じことですが、余計なアセットがパッケージに含まれないように指定すべきです。

公式のドキュメントの一部とほとんど同じことを書きます。見比べてみてください。

パッケージ化したゲームのサイズを小さくする | Unreal Engine Documentation

 

↓ このようなフォルダ構成になっているとします。Debugは含めたくありません。

f:id:wakanya:20201222013748p:plain(Content以下フォルダ1つ、綺麗だと思います)

 

↓ Project Setting > Packagingについて、

 ① 「Cook only maps」をオンにし、指定マップのみパッケージに含みます。

 ② マップは「List of maps to include in a packaged build」に「+」で枠を追加し、

  「...」よりマップを指定します。削除などは「▼」より行います。

 ③ 除外フォルダは「Directories to never cook」に指定します。

  マップと同様に「+」、「...」、「▼」で操作します。

f:id:wakanya:20201222014119p:plain



3.4. MarketPlaceなど外部アセットを使用する場合は必要部分だけMigrate(移行)する

インポートしてきた外部アセットの未使用コンテンツを一つ一つ削除するのは骨が折れる作業です。新規のBlankプロジェクトか、Contentが空のコピープロジェクトを用意して、必要なコンテンツだけ抜き出す手法が効率的です。

※パッケージ設定はConfigフォルダ、Plugin設定は.uprojectファイルに内包されているので、空のプロジェクトにコピーすることをおすすめします。

 

↓ まず外部アセットにどれだけコンテンツが含まれているか見てみます。

 ① 今回は「Lightning_Electricity_Pack」を使用。(おすすめ。ただし要Niagara)

 ② フォルダを右クリックから、「Migrate」(日本語環境:移行)を選択します。

f:id:wakanya:20201222020824p:plain

 

↓ 含まれているコンテンツをさっと見ることができます。

 たくさんリストされています。プロジェクトに必要なものだけ残したいです。

f:id:wakanya:20201222021313g:plain

 

Migrate機能のすごいところは参照関係を辿ってくれるので、

マップに対してMigrateすることで、使用しているコンテンツだけピックアップすることができます。

↓ Cook対象に含むマップについて、右クリックして「Asset Action > Migrate」。

f:id:wakanya:20201222022938p:plain

 

↓ スクロールが必要無いほど数が絞られました。「OK」を押して移行先を選択します。

f:id:wakanya:20201222023233g:plain

 

↓ 移行先プロジェクトの「Content」フォルダを指定してOKしましょう。

f:id:wakanya:20201222023607p:plain

 

3.4.1. MarketPlaceのアセットって高品質だけどサイズが大きいのでは・・・?

「コンテンツを少し追加してはパッケージのサイズを見てみる」を何回か行うと、

意外と数MBの中にも様々なコンテンツを込めていけることがわかります。

MegaJamのようなコンテストにおいては自作のコンテンツの方が評価されますが、

コンテンツの組み合わせ方法については評価されるので、例えばエフェクト、サウンドなど全く無いよりはマケプレアセットだとしてもあった方が良いとなるはずです。

↓ MegaJam2020にて100MB未満に挑戦してみまして、

NiagaraのMarketPlace外部アセット、64bit」でもなんとか収まっています。

 (UE4.24を使用しています)

www.youtube.com

 

↓ 実装するオセロAIが32bitアプリのメモリを食いつぶすんじゃないかと考え、

 64bit版を選択してギリギリサイズになりましたが、

 そこまでの思考は組めませんでした。なら32bitで背景の解像度を上げるべきだった、

 と反省もあります。ぎ、ギリギリが楽しいんだよ

f:id:wakanya:20201222024413p:plain

 

3.5. pak設定を外してコンテンツの大きさを調べる

ゲームコンテンツを追加した状態で100MBを超えてしまった場合、

不要なPluginが残っていないか再び調べるのも有りです。

またゲームコンテンツの何を削減、調整するか、判断材料のためにPlugin選択時と同様にゲームコンテンツの大きさを調べてみましょう。

 

↓ 基礎編のPlugin外と同様に、pak設定を外してパッケージングします。

 ※パッケージングが終わったら設定しなおしましょう。

f:id:wakanya:20201222033157p:plain

 

↓ WindowsNoEditor内のプロジェクト名が付いたフォルダを開きます。

f:id:wakanya:20201222033729p:plain

↓ 「.u」などで検索し、サイズ順でソートしてみましょう。

 (テクスチャやサウンドが上位にくることが多いと思います。)

f:id:wakanya:20201222033810p:plain

4. おわりに

自分がJenkinsマシンにでもなったかのような気分になりました。

ぜひ自身のゲームをパッケージングして、どのくらいのサイズか見てみたり、

コンテンツをサイズ順にソートしてみたりして眺めてみてください。

そしてこの記事を片手にTiny Awardへ挑戦する方が現れるのを期待しています。。

ウチも、やったんだからさ

UE4アドカレその2、明日はmmlさんの記事です。お楽しみに!

その2:Unreal Engine 4 (UE4) その2 Advent Calendar 2020 - Qiita

 

その1:Unreal Engine 4 (UE4) Advent Calendar 2020 - Qiita

その3:Unreal Engine 4 (UE4) その3 Advent Calendar 2020 - Qiita



LattepandaのOSをUbuntuに変更した

Lattepanda:https://www.lattepanda.com/

x64のCPUが(さらにマイコンCPUも)乗ったシングルボードコンピュータ

Windowsを動かせる。Arduino互換がある楽しいボード。

 

UE4などで作成したアプリケーションも動かせます。GPUが弱いのでパフォーマンスを見ながら調整が必要。

 

乗り換え

手元のWindowsが入っていたLattepandaが0xc00000d、0xc0000098といったエラーで起動できなくなった。たぶん引越し時の衝撃でしょう。

↓エラーコードすら出なかったときの

 

 

いくつか対処法を調べて実行してみたがどれも失敗した。

 

そこでUbuntuを入れ直してみた。

基本的には公式のページに沿っていけば大丈夫だった。

Multiple OS Support - Documentation

 

つまずきポイント

Ubuntu OS InstallationのStep 5(boot OS Selection)実行後、

(initramfs) Unable to find a medium containing a live file system

というメッセージで進まなくなった。

↓画像のUSB3.0にハブ(3.0)を接続してその先にインストールUSBを挿していた。

https://www.lattepanda.com/wp-content/uploads/2016/08/Img02.gif

USB2.0ポートにUSBメモリを直接挿してやりなおしたところ上手く行った。

 

UE4 Editorをセットアップしてみる。(執筆時4.22.1)

↓から進めていけばOK。

api.unrealengine.com

 

USB3.0につけたハブ経由で接続した外付けHDDで作業しようとして、20時間後にビルド失敗。

 

USB3.0端子に直接刺しなおし、unzipからやりなおしてビルドが通った。

ビルド時間が早くなっていました。

 

手元のUSBハブが悪いのかよくわからなかったが、マウス・キーボード以外のデータやりとりはハブを使わない方がうまくいきやすそう。

 

 

第11回ぷちコン「燕天」ゲーム部分の仕様

Unreal Engine 4(以降UE4)を使った2日間のゲームジャムに参加してきました。

【3/16(土)-3/17(日)】第11回UE4ぷちコンゲームジャム | Peatix

 

担当したメインゲーム周りの仕組みについて、

絵や文字で表現しやすいものになったと思ったので書いてみました。

あとはあとで自分で思い出すときのメモです。

UE4の話はあんまり出てきません。

 

説明のため成果物の動画をご覧ください。


【第11回UE4ぷちコン応募作品】燕天

 

操作部分せつめい

動画を見ていただいたあと、以下の図を見ればだいたいわかります。

プレイヤーは円を描くように移動できます。

f:id:wakanya:20190321185329p:plain

基本的には緑のエリアを移動でき、

加速リングを取得して一定以上の速度で赤いエリアも移動できるようになります。

ここまでは、ゲームジャム初日のブレストで方針が決まりました。

方針決定手法については、チームメンバーのブログを参照してください。

【UE4】第11回ぷちコンのぷちコンゲームジャム - 若草なずなのノート

 

方針決定会場:

 

以降は好き放題実装したり触りながら決定した後付仕様です。

まずは、左右の移動、ループ移動に速度制限をつけました。

f:id:wakanya:20190321185338p:plain

これは、以下のように回るだけの動きとなってしまい、

アクション性がなくなってしまうと考えたためです。

 

次に、加速リングの配置です。

手触り的に以下の箇所にリングを配置することで、

連続的にループを行いやすいことがわかったので、

4箇所にリングが出現するようにしました。

f:id:wakanya:20190321185343p:plain

 

マップにリングを直接置いてステージを作成する時間が無かったので、

自動で配置するようにしました。

配置は0.35秒ごとに4箇所のどこかにスポーンさせているだけです。

f:id:wakanya:20190321193145p:plain
無限ループ警察コナイデ

SpawnSpeedRingの中身は、

以下の図のようにプレイヤーの前方に設定したスポーン位置から

スピードリングをスポーンできるようになっています。

f:id:wakanya:20190321185031p:plain

 一定の距離からスポーンすること、プレイヤーの速度が変化することで

プレイヤーの速度が遅いときはリングを取りやすく、

逆に早いときはリングを取りづらくしています。

 

残像部分と獲得得点の仕様せつめい

「きれいな円を書くと得点が高い」を実装するための仕様を説明します。

きれいな円の判定には残像のエフェクトが関係していますので、

まずは残像を説明します。

 

残像のエフェクトは、

「ループ判定になったときから一定時間、毎フレーム残像メッシュを1つ配置」

です。かっこいいトレイルなんてつくれる能力がなかった

f:id:wakanya:20190321200415p:plain

1つの残像メッシュは以下の図のような機能があります。

f:id:wakanya:20190321185522p:plain

相対位置をキープしているのは、画面上に「えん」を描けたことをわかりやすくするためです。

 

続いて得点計算です。

毎フレーム、残像メッシュを配置すると

円周上に点々とエフェクトが配置されます。

そこで「1つ前フレームに発生したエフェクトとの距離」を得点に加味しました。

f:id:wakanya:20190321185049p:plain

単純な座標距離だけでは、

1周ループした場合とループを途中で止めた場合で

あまり差がでなかったので、累乗させました。

 

エフェクトが出る一定時間が終了したときに、

出した残像から獲得得点の計算を行い、得点加算処理を発火します。

 

以上でございます。

その他の工夫

  • 速度によってカメラを引くと同時に画角も変えています
  • 微妙にプルプルしているので空気中を飛んでる感があります
  • 翼から飛行機雲トレイルが出ています
  • かっこいいのでその場でローリングできます

【第10回ぷちコン】UE4 プリン ぷるぷる させ方 [検索]

4テーマ「ぷち」を与えられて最初に思いついたのがプッ○ンプリンでした。

第10回UE4ぷちコン|株式会社ヒストリア

プッチ○プリンを作ることばかり考えていました。期間中に8個たべました。

 

最終的にこの動きになりました。皿に落ちる瞬間で何度も一時停止してみてください。

 

それでは、ぷるぷるプリンができていく様子を書いていきます。

 

理想とするプリンの条件を考えました。

・揺れて、ぷるぷるする。

 ・外力によって凹んだり凸ったり、変形する。

 ・変形し外力が失われた後、徐々に振動しながら元の形状に戻る。

 ・エモい揺れ方をする、乗ってぽよんぽよんしたい。

 

実装方法を考えました。

・アニメーションを作成して再生する。

 ・ いろんな方向から力を受けたときにどうしたら良いかよくわからなかった。

 ・頑張ってブレンドすればできるのか・・・?

・BlueprintからScaleを時間で変化させる。

 ・実装は簡単だが、折れ曲がる挙動なんかができない。

・なんかいい感じの物理に任せる。

 ・これが理想だなあ。なんか無いかなあ。

 

たどり着いたのが、NvidiaのGameWorks。

Flexというパーティクルベースのシミュレーション技術

  www.youtube.com

 ・クッションのような球体と四角のメッシュが出てきます。

 ・いい感じに使ったら、ぷるぷるできるんじゃないかと考えました。


・たどり着いたというより、心当たりがありました。

 ・NVIDIA、「VR Funhouse」がMODに対応、開発キットも公開 - GAME Watch

 ・このキットを使ったゲームジャムに参加したことがありました。そのとき、ちょっと調べました。

 

UE4 Flexの開発環境を揃える

・こちらにとてもわかりやすい導入記事があります。

・2018年9月頭の段階で、私は4.17.1ブランチを使用しました。

 ・https://github.com/NvPhysX/UnrealEngine/tree/FleX-4.17.1

 ・4.19.2のブランチがありましたが、私の環境では自分のStatic Meshに

   Flex Assetをアサインできないバグがあったため使用できませんでした。

 

余談:ぷちコンに提供されているツールライセンス

UE4のエンジンビルドは時間かかるのでここらで休憩。

ぷちコン期間中にIncrediBuildさんのライセンスが提供されていました。

エンジンのビルドはもちろん、シェーダのコンパイルも分散されます。

導入自体は簡単です。使った方が得だと思います。

今回の自分のプロジェクトと相性が良かったです。なんだかんだ4.19.2ブランチの中で何度もリビルドしたので。。。

 

他にも、つよいライセンスが提供されていました。

第10回UE4ぷちコン 協賛社ライセンス一覧|株式会社ヒストリア

 

UE4 Flexのデモプロジェクトを見てみる

・導入のところでソリューションをのビルドが完了していれば、

 FlexProject以下の.uprojectが開けるはずです。

f:id:wakanya:20180919222105p:plain

・Maps以下の「flexSoftTestMap」を開いて、実行してみましょう。

 フォルダがごちゃごちゃ。このままぷちコンに使っちゃったの。許してね。

f:id:wakanya:20180919224345p:plain

 

・輪っかやタコがふにゃふにゃしている様子が見えます。

 

デモプロジェクトのタコを見てみる

・TestPackages/Flex 以下の 「flexOctopus」を開いてみましょう。

・うわっ、タコが赤いつぶつぶで埋め尽くされています。イクラかな?

 ・このスライドの30ページの図を見れば、

  つぶつぶの集まりで何をやりたいのかがなんとなくわかると思います。

ツールバーFlexのvisible切り替え、詳細欄にFlexの項目があります。

f:id:wakanya:20180919233225p:plain

 

FlexカテゴリのFlex Assetには「Flex Soft Asset」がアタッチされています。

 ・Softはふにゃふにゃする物体のためのアセットです。

 ・他の選択肢として、Cloth(布)、Solid(個体) があります。

 ・パラメータはこちらを参照(丸投げ)。Assets — Flex Artist Tools 1.0 documentation

f:id:wakanya:20180920002211p:plain

・また、Container Templateには「flexSoftContainer」がアタッチされています。

 ・Containerはパラメータ設定用アセットのようなものです。

 ・こちらを参照(丸投げ)。Containers — Flex Artist Tools 1.0 documentation

f:id:wakanya:20180920003328p:plain

 

・プリンのメッシュを作成する前に、タコのメッシュを見てみました。

・けっこう細かく作られています。

f:id:wakanya:20180920003939p:plain

 

自分のメッシュを入れてみた。

・気持ち的にはタコに負ないくらい分割したメッシュを作りました。

 後で使われるかもしれないので進捗と一緒に寒いギャグを言うのはやめようと思いました

・最終的には以下のようなパラメータになりました。

・タコより大きいので、つぶつぶや動きを大きくしたりという感じでしょうか。

f:id:wakanya:20180920010927p:plain

f:id:wakanya:20180920010839p:plain

 

・設定によっては簡単にこんな挙動になります。

・設定の試行錯誤で2日くらいかかりました。なにしろ反映が重いので設定を変えるたびにPCが悲鳴をあげるのです。。

 

跳ね返ってほしい

・わたあめのような雲に乗ってみたいという願望は誰しも持っているはずで、

 プリンに乗ってぽよんぽよんしたいという願望も誰しも持っています。

 

・メッシュとFlex Softを適用しただけの状態では、自キャラに潰される一方です。

 

・シンプルにコリジョンを作ってキャラクターをジャンプさせました。

・やっといつものUE4って感じですね。実家のような安心感。

f:id:wakanya:20180920012333p:plain

・Delayを入れることで、わずかにめり込んでから跳ね返ったように見えます。

f:id:wakanya:20180920012339p:plain

 

心がぴょんぴょんするんじゃぁ^~

 

そうしてこちらのゲームを作ることができたのです!

www.youtube.com

以上となります。ここまで見ていただいてありがとうございました。

パラメータなど無駄なところがあるかもしれません。詳しい方教えて・・・

 

その他の苦闘は気が向いたら・・・