Unreal Engine 4 備忘録

2020-03-21

Unreal Engine 4 を仕事でちょっと触ったときの個人的なメモ
(UE 4.21 くらいの頃)

概要・歴史

  • Epic Games 社によるゲームエンジン。写実的なグラフィックが得意
    • 1998 年リリースの FPS「Unreal」で使われたエンジンが原型
  • Unreal Engine - Wikipedia
    • UE4 は 2012 年頃リリースの模様

特徴

  • 言語は C++ と、ビジュアルスクリプトである Blueprint を用いる
  • ゲームエンジンのソースコード(C++)が公開 されていて、全部読める
  • UE4 エディタを動かすのに要求されるスペックは(Unity などと比較して)高め
    • 強めのグラフィックボードを積んだ Windows 推奨
    • Mac は 2015〜 頃の MacBook Pro ではもはやツラい… くらいの温度感。iMac 2019 ならまあなんとか

  • もともと FPS 向けに作られているので、FPS っぽいゲームを作るのは得意
  • リアルタイム通信のマルチプレイも、まるっと乗っかるなら楽に作れるような仕組みが用意されている

費用感

  • 料金形態はロイヤリティー形式
    • 「四半期ごとの総売上で 3,000 ドルを超えた部分」の 5 %を支払う
  • Unity (Pro) の 1 人 1 年 16,500 円と比べると、開発期間中に何人で使っても無料で使える、という違いはある
    • 開発メンバーが多く長期間の開発になる大規模開発では(ゲームがコケてもお金を払わなくて良いので)リスクヘッジにはなる

採用事例

  • Unreal Engineを採用したゲームソフト一覧 - Wikipedia
  • List of Unreal Engine games - Wikipedia
    • 据え置き機向けのハイエンドゲームで多く採用されている
      • 「バイオショック」「フォートナイト」「Borderlands 3」など
      • 国内産では「ドラクエ XI」「FF VII リメイク」「キングダムハーツ III」「エースコンバット 7」など
    • モバイル向けは 2020 年現在では Unity が採用されるケースが多いが、たまに UE4 で作ってるやつもある
      • 「PUBG」「Lineage 2 Revolution」「OVERHIT」など
      • 「Life is Strange」(2015) も UE4 製で、2017 年に iOS / Android 版が出ている

情報源

Web 上の情報

書籍

総合的な入門書で日本語のものは以下が代表的。というか、これ以外にはあまり無い:

  • バンナムの開発者さん達による解説書
  • エディタの各種機能の使い方が画像つきで解説されており、大枠の理解に便利
  • ただし UE4 向けの C++ 実装の話は載っていないので、そこは期待してはいけない
    • (書籍に出てくる処理の制御は Blueprint で行われている)

初めに押さえておきたい系

UE 用語

基本操作 / 基礎知識

エディタが重すぎる時

UE4 のエディタはデフォルトだと、ゲームを実行していない時でも全力のフレームレートで 描画を行おうとする。 Mac だと立ち上げているだけでファンが唸るレベル。 作業時は別に全力で描画してくれなくてもいいので、自分は以下のような設定をして CPU / GPU 使用率を下げていた:

  • リアルタイムレンダリングを OFF にする
  • コンソールに t.MaxFPS 10 などと打ってフレームレートを制限する
    • Window → Developer Tools → Output Log を選択するとコマンド入力欄が出てくる
  • 以下のファイルの [Startup] の下にコマンドを書くとデフォルトで適用してくれる… みたいな情報を見かけたが、自分の環境では効いてくれなかった
    • /Users/Shared/EpicGames/UE_4.21/Engine/Config/ConsoleVariables.ini

雑多な Tips

  • 最初に開くシーン(レベル)の設定って?
  • 実行時にマウスポインタが消えたぞ
    • Shift + F2 で再表示
  • キーボードショートカットの設定は?
    • Editor Preferences で設定できる
    • Open Level Blueprint とかはよく使う気がしたので僕はショートカットを割り当てた

UE4 のソースコード


  • ソースコード、それは最終的に辿り着く真理
    • ドキュメントが足りない時に ソースコードという最強の仕様書 が読めるぞ!
  • UE4 エディタ自体をソースからビルドして動かすこともできる

UE4 での C++ 実装


  • C++ 11 ベース
  • とは言え UE4 仕様の C++ という感じで、メモリ管理やライブラリまわりは UE が用意したものに乗っかる感じ
    • UE 独自のマクロを随所に書くイメージ
  • C++ だが、なんかエディタでホットリロードができてすごい

クラスの接頭辞

AActor とかのクラスの継承関係

こういう感じ:

- UObject
`--- AActor
   |--- APawn
   |  `--- ACharacter
   |--- AController
   |  `--- APlayerController
   :

アサーション

Blueprint


  • ビジュアルスクリプトの Blueprint は UE4 の特徴的な機能のひとつ
  • 基本は簡単な処理を組んだり、プログラマが C++ 側で実装した処理を呼び出す形で敵 AI とかのシーケンスを組む、 みたいな使われ方が想定されていると思う
    • (当然 C++ と比較すれば実行時のオーバヘッドはそれなりにある)
  • 仕事で少し、ある程度まとまった処理を Blueprint で組んでみたりもしたが、 まあまあ壮大な感じ (全貌を知るには画面数枚分のグラフを眺める必要がある感じ) になってしまった
    • Blueprint の量が多くなってきた時に見通しを良く保つのはセンスが要りそう
    • あとノードや線の配置センスも要りそう
  • 複数人が同じ Blueprint をさわったらコンフリクトがつらそう?
    • 一応マージツールみたいなものは用意されてるらしい

マルチプレイ

モバイル向けのアセットダウンロード

Unity では AssetBundle というのが昔からあるが、UE4 公式でモバイル向け動的アセット更新に対応してきたのは比較的最近の様子。

情報源

Asset Manager と Chunk

エンジンのソースコードで関連が深そうなのはこのあたり:

  • Engine/Source/Runtime/Engine/Private/AssetManager.cpp
  • Engine/Source/Runtime/Online/BuildPatchServices/Private/BuildPatchInstaller.cpp
  • Engine/Source/Runtime/Online/BuildPatchServices/Private/BuildPatchServicesModule.cpp

(以下、ダウンロードを DL と表記)

  • Asset Manager は UE4.17 (2017-08) 以降で正式リリースされた、UE4 公式のアセット管理機構
    • アセットを Primary Asset / Secondary Asset という親子関係に分類して管理
    • Secondary Asset とは、Primary Asset が参照しているアセットを意味する
      • 例えばキャラクタの BluePrint を Primary にして、キャラのマテリアルやモーションを Secondary にするなど
    • 公式の機能であり、Epic Games 自身も自分たちのゲームでドッグフーティングしている様子
  • 配信用のアセット単位は Chunk と呼ばれる
    • 同じ Chunk ID を降ったものが同じ Chunk (.pak ファイル) にまとまる
    • Chunk ID = 0 はパッケージ(ipa / apk)に抱き込まれる初期アセットとなる
    • Project Settings → Asset Manager などで事前設定を行っておけば、あとはパッケージングを行えば Chunk ファイルが生成される
      • CloudDir というディレクトリ配下に出力されるファイル群を配信サーバにアップロードすればよい
      • 生成されるファイルは Chunk ごとのデータと Manifest
        • Manifest はバージョン情報とファイルのハッシュ値を含む
        • DL 関数は 「バージョンが違う」「バージョンは同じだがハッシュが違う」 場合に再 DL してくれる様子
          • (特定の Chunk だけ修正する場合はバージョンを変えずに Chunk を再作成する)
  • Primary Asset には Primary Asset IDChunk ID が割り当てられる
    • Primary Asset ID は Asset Manager の管理用
    • Chunk ID は上述したもの。Secondary Asset にも同じ ID が連鎖的に適用される
  • Chunk の DL 処理について:
    • 起動時に一括 DL する場合はよしなにやってくれるらしい
    • 都度 DL は Asset Manager のロード関数を利用して行う
    • Project Settings → Asset Manager → Should Acquire Mission Chunks on Load を有効にしておく
    • 基本的な DL 処理は BP ノードで提供されている
    • Chunk の DL 後にそいつをマウントしてやれば、最初からそのアセットが抱き込まれていたかのようにアセットを扱える(多分)

UE4 さわったときの個人的な所感

  • 自分は普段は Unity を使っているが、Web 上や書籍の情報量の多さで言うとやはり圧倒的に UE4 の方が少ないな… というのは思った
    • (というか Unity が人気すぎるだけで、他のマイナーなエンジンに比べたら UE4 は情報がある方だが)
  • ちょっと凝った機能 (アセット更新のための Chunk 機能とか) を試すときに、 Web 上の情報や API Reference だけでは細かい仕様が十分にわからず、 結局最後はソースコードを読みに行く、ということがあったので、コードリーディングの力はつきそう
  • 開発は Mac より Windows 機の方が安定しそう
    • グラボやマシンスペックを用意するコスパ面でもまあ Windows が順当
    • Mac で動かしてた時は何でもないところでエディタがクラッシュすることもちょいちょいあった

  • ちょっとさわった程度なのでまだ全然深く理解できてはいないが、 レンダリングまわりとかに踏み込んだらもうちょっと見えてくるものがあるのかな?
  • ビジュアルスクリプティングは初めてだったので、Blueprint は新鮮で面白かった
    • 非エンジニアの人の場合、あれはどれくらいとっつきやすいものなのだろうか…
    • あれでロジック組めるなら別に Lua みたいなスクリプトでも書けるのでは? と思ってしまうのは自分がプログラマだからか
    • まあでもコードで書くのと違って 「選べるものしか選べない」 みたいな安心感はあるか