裏ゾーンUE4（Unreal Engine 4の普段語られない裏ワザ）

みなさん、いつもアンリアルエンジンのご活用ありがとうございます！

この記事は[Unreal Engine 4 (UE4) Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ue4) 21日目の記事です。

昨日のsleepingdragonさん（‏@housakusleeping）の[[ue4]ボーンアニメーションの再利用　MMDモデル編](http://qiita.com/housakusleeping/items/fa1300a9f4aa1a3db58a) 自作モデルやMMDモデルにUE4のアニメーションを使いまわせるUE4のリターゲットの解説とてもわかりやすくて、すぐにも使える良い記事でしたね。

今日はあまり普段語られないようなUE4の裏話をつらつらと書き連ねてみたいと思います。

#まずはUE4の裏ワザいろいろ
##プロジェクト
*.uprojectをダブルクリックすると、エディタで該当プロジェクトが開ける事は知っている方も多いかと思いますが、右クリックで現れるコンテクストメニューにはUE4用のものが現れます。
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/065af2cd-f667-983f-4e47-7fa63f057a80.png)

 - 「Launch Game」はエディタではなく当該プロジェクトをゲーム起動できます。ESCキー等で抜けられないので、「Alt+F4」やコンソールコマンド「quit」でゲームを終了してください。
 - 「Generate Visual Studio project files」は読んで字のごとく、Visual Studio用のプロジェクトファイル群を作成してくれますが、追加用のC++のソースが存在していないとエラーになります。
 - 「Switch Unreal Engine Version」は、プロジェクトに紐付けられているUE4のバージョンを変更できます。
 - ![image](https://qiita-image-store.s3.amazonaws.com/0/58485/e0597db7-a779-1498-b51e-b3dfd0e5c7a7.png)
 - また、このバージョン変更のダイアログを開くと、現在紐付けられているバージョン番号が選択されている状態になるので、ラウンチャーを開かなくてもバージョンを確認できるという裏ワザもあったりします。


あと、プロジェクトのフォルダが出ているのでついてにいうと「DerivedDataCache」「Intermediate」「Saved」はプロジェクトを配布する際や共有時は含めない方が良いです。（それぞれ、キャッシュ、中間ファイル、個人用データ、となっています）

もう一つついでに、プロジェクト名と同名の192x192のpngファイルをuprojectファイルと同じフォルダに置いておくと、その画像がプロジェクトのサムネイルとして扱われます。

##プロジェクトの保存先

UE4インストールしたいけど**容量足りねーっ！！**という叫びを時々見かけます。
容量を食うフォルダを移すのも効果的です、詳しくは[wikiのLauncherのトラブルシュート](https://wiki.unrealengine.com/Troubleshooting_Launcher_Problems)の方にありますが、容量が足りなくなった場合LauncherのVaultCacheを別のドライブに移して、シンボリックリンクをはるのが効果的です。また、マイドキュメント中にあるUnreal Projectsを移す事も効果があるかもしれませんが、wikiにあるようにマイドキュメントフォルダ自体を別の場所に移すのも良いかもしれないですね。

それにしても、Windowsの「マイドキュメントフォルダ」を右クリックのプロパティから「場所」タブの「移動」で簡単に変更できるの皆さんご存知でした？僕はこの記事で初めて知りました。元MS社員なのにぃ(ﾟ∀ﾟ)ｱﾋｬ。

##ブループリントのプロジェクトのC++化
ブループリントのプロジェクトをC++で高速化したい、という需要**たまに**あるようで・・・
まずは、ブループリントのプロジェクトにC++のコードを追加します。一番簡単なのはエディタのファイルメニューからの追加。
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/f0f43d25-72e2-16b4-d27b-1598d4249532.png)
すると、どのクラスを継承したC++のコードを生成するか聞いてきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/a1a44024-d78f-ba27-ee3a-33ea0d4f3aad.png)
名前をつけます。
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/cc996eab-726a-cf70-5d2c-b22af9bf0200.png)
すると、*.hと*.cppが生成され、必要に応じてソリューションファイルやプロジェクトファイルも作成・更新されてビルドが始まります。

##さらにブループリントのC++化
完璧なコンバートではないんですが、実はブループリントをC++化する機能があります。
Config/～Engine.iniに
[Kismet]
bNativeCodeGenerationTool=true
を追記すると…（Engine/Config/BaseEngine.iniの場合は既にエントリーがあってbNativeCodeGenerationTool=falseになっています）
ブループリントエディタのファイルメニューの一番したにDeveloperオプションが現れちゃいまして、「ネイティブコードを生成」なんてメニューが出てきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/9ce172a2-d23e-c9c9-cfd4-05166518512b.png)
「ネイティブコードを生成」を選択すると…
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/2afe063e-af55-e073-8b0a-1955e5904ac7.png)
クラス名を設定できるので設定します。
あとはプロジェクトに勝手に追加されます。でも…最初に「完璧なコンバートではない」と書いたように完璧ではなく、コンパイルしてもエラーになるので、これを参考にC++のコードを書く、程度に考えていただければと。

将来的にはもう少しちゃんとC++化できるようにしたいようなのですが、今のところスケジューリングはされていない状況です。上記をご参考程度にC++コードを最初から手で書いていただいた方が可読性やメンテナンス性は良いかなと思います。

##ラウンチャー
検索欄に入力できる特殊な文字「!この文字列を含まない」「& And検索」「| Or検索」

##ドキュメント
APIのドキュメント検索めんどくさいと思いますが、実は、Engine/Documentation/CHMフォルダにAPI.chmというヘルプファイルがあって、APIドキュメントはオフラインでも検索できます。:)

##エディタ
レベル上に配置されたアクターの操作をロックしたくなる時ありませんか？そんな場合はレベルストリーミング機能で編集用レベルとロック用レベルを分けてしまう方法も有用です。（レベルストリーミングは、複数のレベルファイルをまとめて扱ったりゲームの進行に応じて読み捨てをしながらレベルを切り替えていくための機能です。同じ座標に複数のレベルを重ねて利用することもできるので、作業分担や機能によるレベル分けをすることで作業効率を向上させるためにも使えます）
![image](https://qiita-image-store.s3.amazonaws.com/0/58485/78713282-37d8-19f7-3411-6be8c04c7165.png)
「ウインドウ」メニューの「レベル」でレベルストリーミングのレベル群を表示させる事ができます。そしれレベルタブのすぐ下にある「レベル」をクリックすると新規作成や既存のレベルをレベルストリーミング対象として呼び出す事ができます。
そして、レベル名をダブルクリックすると、そのレベルが操作対象になるのですが、他のレベルにあるアクターを選択してから、右クリックのコンテキスト・メニュー中の「レベル」項目に「選択肢にレベルを追加」（ちょっと日本語変ですみません）を選択すると、アクターを別のレベルに移動させることができます。その後レベルを保存してロックをしてしまえば、ロックされたレベル上のアクターはいじれなくなります。

あと、F9キーでゲーム中のスクリーンショットを撮ることができるのがご存知の方も多いと思いますが、エディタのビューも簡単にスクリーンショットが撮れます。やりかたはF9キーを押しながら、撮りたいビューを左クリックです。これで、プロジェクトフォルダのSaved/Screenshots/Windows/等にScreenShot数字.png等できていると思います。

##エディタの環境設定
実はエディタの環境設定にも有用な設定項目がいくつもあるので、その中でも特に有用なものをご紹介させていただきます。

- 「キーボードショートカット」はUE4のエディタを自分好みにカスタマイズした方は一度覗いてみると、エディタの様々な機能が発見できるのでオススメです。
- 「ロード＆保存中」の「Auto Reimport」でUE4にインポートした画像やモデルファイルがDCCツール等で更新された際に自動で再インポートされる機能があります。ここには詳細設定が隠れていますが、詳細設定を開くと常時見張るフォルダや、ファイル名を見張る際のワイルドカード等を指定できます。
- ![image](https://qiita-image-store.s3.amazonaws.com/0/58485/57e880b3-e9b9-bd1e-0b72-6e73dd901657.png)
- 「未分類」にある「Performance/Show Frame Rate and Memory」はパフォーマンス等が気になる方々には有用です。
- 「ビューポート」の「Controls」のカメラのパンを逆にする（Maya風）はMaya風なパン操作になるのでMayaユーザーさんには便利です。ちなみにAltキーを押しながらマウスドラッグすると回転もMaya風になります。
- 「ビューポート」の「Grid Snapping」ですが実は詳細設定にグリッドの設定値が隠れていまして、ここの数字を変えることで10単位でないような変わった値でグリッドさせることもできるようになります。
- 「ビューポート」の「Look and Feel」にある「Link Orthographic Viewport Movement」のチェックを外すと、等角投影ビューの3つがマウス操作で連動しているのをやめて個々に操作できるようになります。
- 「Privacy」「Usage Data」の「Option」を「Don't Send」にするとエディタ使用時の情報をEpicに送らなくなります。

##最後に
今回は思いつくままにUE4の裏ワザを書いてきましたが、[こちらで紹介したデバッグ機能](http://qiita.com/junyash/items/1f59dd8a4c712ce9ede4)もなかなか面白いのでぜひ併せてご活用くださいませ。

こちらも他にも思いついたら追記していきます～(ﾟ∀ﾟ)ノ

明日12/22は@pantherheadさんの「UE4とUE4Duinoを使った何か」です。よろしくお願いします！