Unreal C++でのプログラミング環境についての私的メモ
Event for Diverse Game Engineersでのalwei(@aizen76)さんによる「Unreal Engine 4とUnreal C++でのプログラミング環境について」のメモを載せます。
先に断わっておくと僕はC++どころかプログラミング全般に疎いことと、(メモを残すには)話のペースが早かったため、至らないところが多いと思います。スライドが公開されているので先にそちらを参照してください。
以下、(実演等)スライドに書いていない部分を意識したメモ
○何故C++を使うのか
・パフォーマンス。BPに比べて、何倍の差が出る可能性もありうる。(聞き間違いでなければ十数倍)
・エンジンやエディター拡張。エンジンはフリーで全て読める。自分で拡張したものをgitに上げると採用されることも。
・外部ライブラリやSDKを動かしたい。
・独自デバイスにつなぎたい。例:Kinect
○Unreal C++は素晴らしい。Unreal C++ is Awesome!
・C++を初心者でも使いやすくし、独自の拡張でUnreal Editorとの親和性を高めている。
○ビルドシステム
・Unreal Build Toolというものが全体の管理をしている。
・Mono C#が組み込まれている。管理やリンクなど、複雑な部分まで組み込まれているという。
最終的な情報をVSやXcodeに渡すことによってビルドを完了させている。
○比較的モダンC++
・近年のC++の特徴は大体取り組んでいる。
・ライブラリのコンテナはrange based forに対応。
・あくまでもC++を簡単に扱えるようにするためにC++の難解部分の仕様は避けられている。例:Template Programming
○コーディングルール
・公式ドキュメントにある。(コーディング標準 | Unreal Engine)
・UE4のプロジェクトはこれで統一すれば混乱は少ない。
・ルール自体はC#の標準にかなり近い
・ルールの例:中括弧の改行
○スタンダードライブラリー
・C++のスタンダードライブラリーは使わない。ただし考え方は近い。
・ゲームに特化したライブラリーがある。
・無理にスタンダードライブラリーは使わない方がいい
○コンテナ
・約50種類ある。標準より圧倒的に多い。
・例:std::vector→TArray
○自動化されたコード生成環境
・Unreal Editorが自動で行う。例:新規Actorに名前を付ける。
・追加も楽でミスが少ない。
○完全なメモリー管理とGC搭載
・ガベージコレクション有。
・UObjectを継承したクラスであれば、自動的にUE4のガベージコレクタへ登録
○メモリーの可視化
・スマホ上でも出来る(4本指→コンソールコマンド)
○スマートポインタ
・UObjectでないものはGC対象にならないのでスマートポインタを使う。
ここからはよりUnrealらしい話
○メタ情報
・Unreal C++にとってメタ情報は無くてはならないコア機能。
・BPとの完全な連携も可能
・C++の内容がBPへ追加される。
○ホットリロード
・C++では実行中にコードの書き換え可能
・冗談ではない。
・モジュール化によって、書き換えた場所の部分的な読み直しが可能。
※ここで実演アリ surface Proで動かした。オンボードだが結構サクサク動くとのこと。
・ファイル?→新規C++の追加→新規Actorに名前を付ける。これでC++で書けるアクターを生成。
・C++がエディター上でコンパイルされる。VSでは何もしていない。
・Unrealでもヘッダーの書き換えは時間がかかるので避けた方がいい。
・実行前にマネキンのアクターをレベルに追加した。
・コンパイル後にマネキンにコードを書いて、コンパイルせずに実行(ゲームを動かす)。
・そして実行→コンパイルで、実行中のまま変更が適用された。
・さらに実行中のまま、マネキンにコード追加。コンパイルに失敗した。
・エラー文をダブルクリックすれば問題のコードに飛べる。
・コードで追加した変数はBPにも反映されている。
・UE_LOGによって、ログに文字が表示された。いわゆるPrint
・VSを立ち上げずに、エディター上で書くことも出来る。書きにくいので非推奨。
・エディター上の変数等をダブルクリックするとVSのページに飛べる。