ブループリントを C++ にクックする #UE4Study

# ブループリントを C++ にクックする

## 参照
アンリアル 4.15 がリリースされました！
https://www.unrealengine.com/ja/blog/unreal-engine-4-15-released

C++の勉強になるかと思いブループリントから、C++のソースコードがどのように変換されるか試してみた。

高度なブループリントのネイティブ化
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/TechnicalGuide/NativizingBlueprints/Advanced/index.html

## ブループリント：BP_CookSampleを作成する

### コンポーネント、変数、関数が変換されるように設定する 
親：Actorのブループリント BP_CookSampleを作成する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f74b80cb-e25a-dae5-f3c9-d4cf3a39c3ac.png)

コンポーネントにCubeを追加
検索した時に見つけやすい様に、絶対同じ名前にならないように設定した。
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9eef2d30-ae7a-ecf8-8ac6-41c5d326735a.png)

変数と関数を追加した。
関数のIN/OUTも設定した。
それぞれ検索に引っかかりやすい名前に設定した。
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f511986f-83f5-97dd-b9dc-0b01d27f4e74.png)

### Nativezにチェックを入れる

1. Class Defaults
2. Packaging: Nativezにチェックを入れる

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a56eea7f-d35e-24ae-da9b-0222a1c90cab.png)

## Project設定でPackagingのBlueprint Nativization Methodを設定する

1. プロジェクト設定を開く
2. Packagingを選択する
3. Blueprint:Blueprint Nativization Method にInclusiveを設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9aad825c-a69a-2e15-eff4-7e196444c132.png)

Windows(64bit)でパッケージング
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f0052a6e-8fd4-ee66-d633-06705320c88c.png)

outフォルダを作成して、ＯＫ
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f7415825-dfb4-82b4-86ce-bf7985bf0497.png)

## CPPに変換されたブループリントを探す

出力先を調べたが、何処にも見つからない
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8144d3d1-7d3d-7a04-670e-286fc2c5d6c2.png)

ビルドのログをテキストエディタにコピーする
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3cc4ba57-ed73-e0b8-e3ed-263ff78a7b33.png)

BP_CookSampleで検索すると、BP_CookSample__pf2132744816.cppが見つかった。
そして少し上にプロジェクトパス\Intermediate\Build\Win64\BPCookCPP\Development\BPCookCPP.uhtmanifest

というコマンドがあったので、Intermediateフォルダ配下が怪しかった。
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/618e592d-c66f-a606-7b44-830d9681dc1f.png)

プロジェクトパス\Intermediate\WindowsNoEditor\NativizedAssets\Source\NativizedAssets\Private配下に、BP_CookSample__pf2132744816.cppを発見した

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4e522a8d-ebfe-1771-a7ba-34401fc8a1a2.png)

ヘッダもPublicフォルダに変換されていた。
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8b6f531a-a518-b342-0944-946102bb2d31.png)

## どのように変換されたか確認してみる

コンポーネント:CubeCubeCube
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/69683a1a-5c77-4089-963f-85ee51760ae1.png)

関数：ABCDEF

関数名は bpf__巻子名__pfという名前に変換される
引数名は bpp__引数名__pfという名前に変換される

足し算ノードは　UKismetMathLibrary::Add_IntInt　に変換された

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d75caf12-90d6-9f93-41eb-11fdd15cab3a.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/734c0f78-f45b-b414-39cf-7ee1778fe18b.png)

変数名：IndexIndexIndex

変数名は bpv__変数名_pfという名前に変換された
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b9b688fd-e863-6c29-962d-de6e5ffbe55c.png)

## 指定したブループリントだけ変換する

BP_CookSample以外にも変換されている
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8b6f531a-a518-b342-0944-946102bb2d31.png)

1. プロジェクト設定を開く
2. Packagingを選択する
3. Blueprint:Blueprint Nativization Method にExclusiveを設定する
4. BP_CookSampleを追加する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/68c9f2d4-6440-5a7f-bfcf-31d20a4b5aa0.png)

Windows(64bit)でパッケージング
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f0052a6e-8fd4-ee66-d633-06705320c88c.png)

List Of Blueprint assets to nativizeに追加したブループリントと、以下の２ファイルが出力された
小さいプロジェクトだからわからなかったが、必要なブループリントだけ変換するとビルドが早くなるらしい

- NativizedAssets
- NativizedAssets_Dependencies

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/fc158f90-873d-0310-3015-9bd0fbdf0d41.png)