Houdini Engine For Unreal Engine で遊ぼう

Merry Xmass!!
最終日の25日はHoudini Engine For Unreal Engineのお話です！

Houdini Engine For Unreal Engine(以降**HEUE**と略)というのは
文字通りUnrealEngine上で動くHoudiniEngineなんですが
分からない人の為に簡単に言い直すと

:::note 

**Houdiniのいろんな機能をパッケージ化したもの(HDA)がUnrealEngineで動作しますよ**

:::

ということです。

:::note warn
大事な条件３つ
<font color="Red">**1. HEUEはApperenticeのライセンスでは動きません。**
**2. Indieと商用版のライセンスは混ぜて使えません。**
**3. Indie版は商用ライセンスの無い、最大3台までのコンピュータ上で動く**
</font>
:::

[こちらのページ](https://www.sidefx.com/ja/products/houdini-engine/plug-ins/unreal-plug-in/)にこの辺の記載がありますので御覧下さい。




## HEUEのインストール方法
1. UnrealEngineとHoudiniをインストールする。
2. C:\Program Files\Side Effects Software\Houdini 20.0.506\engine\unreal\5.3\HoudiniEngine
を
C:\Program Files\Epic Games\UE_5.3\Engine\Plugins
にコピーする。
※バージョン名は適宜書き換えて下さい。
※※ドキュメントに記載はないですがプロジェクトの方のPluginsの方でも大丈夫でしたっけ？
3. UnrealEngineのEdit -> Plugins でHoudini Engineにチェックを入れる
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/94946626-c973-7d02-c5ad-275906530d96.png)
これでUnrealEngineのコンテンツブラウザにHDAをドラッグ＆ドロップ出来る様になりました。

## HDAを作ってUE上で動かしてみる

グレイマンでFF14のクガネ登山やエルデンリングの梁渡りみたいなゲームだったら特に
ゲームの処理を書かなくても素のサードパーソンで遊べそうだなーということで
ジャンプして登っていく地形を生成してみようじゃないか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/e4445616-67c5-3f33-40d5-94dde14ec04e.png)

という訳でこの様なシンプルなノードネットワークを組んでみました。
一番下の赤い板から一番上の緑の板まで登り切ったらクリアという地味なルールを設けました。
パラメータ次第でシビアなゲームにもヌルゲーにもなり得ますね。
落ちた時リトライがめんどくさいのでそこに板でも貼っときましょう。

このままだとUnrealEngine上では動かないのでHDA化します。
その為にノード(SOP)を全部選んでShift+Cを押してサブネット化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/2e6c6e38-fc82-4d0e-5c9e-aaa15f3ab27b.png)
一つにまとまりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/7d46a0f8-6b26-d9f5-d48f-90974eea3727.png)
Edit Parameter Interfaceで編集したいパラメータを表に出しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/814a6baf-7e1f-2f15-2738-27107d8dd359.png)
サブネットをリネームしておくとHDAのデフォルトの名前にしておいてくれるのでいい感じにリネームしておき
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/a0aa775b-b811-0447-018e-16de85063e90.png)
右クリックメニューからCreateDigitalAssetを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/6bec090e-b7a8-f6f9-58db-ac898df42767.png)
チェックを外しておくとファイル名が短くなりUnreal上での視認性も上がるので
ここではAuthorとVersionのチェックを外しておきCreateボタンを押します。
(自分はお仕事の時はチェック付けてます。)
サブネットでちゃんとパラメータを設定してあれば次のEdit Operator Type Properties は
そのままAcceptボタンを押して閉じます。
閉じる前にHDAがどこに保存されたのかだけ確認しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/a263f30f-d32c-d42f-f848-f07473a64fee.png)

あらかじめサードパーソンプロジェクトを作っておき
それを開いてUEのコンテンツブラウザにHDAをドラッグすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/50f1a628-f86b-050a-445c-83533db1914c.png)

Houdiniアイコンのアセットが登録出来ました。
これを更にマップ上にドラッグしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/2ee6d3a2-59d7-a415-3a20-8d19781a3fd2.png)
表示されました！
壁を取り払い床の大きさを調整していざプレイボタンを押すと・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/8b7278d1-0f1c-6c09-3780-8762a3180145.png)
貫通しています。
これはコリジョンが無いからですね。
コリジョンを設定するにはどうすれば良いでしょうか？
答えは[https://www.sidefx.com/docs/houdini/unreal/meshes/collisions.html](ここ)に書いてあります。

という訳で一旦Houdiniに戻って
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/a9a95fcd-1ea8-895b-ea9e-46f8e93db883.png)
GroupSOPを作り **rendered_collision_geo** というプリミティブグループを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/3e508217-bcfc-1058-56af-327e8e88379b.png)
再度HDAをAssetsのSave Assetで保存してUEにドラッグします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/2fc39a89-d346-ec00-e934-6d2fe47c782e.png)
リビルドボタンを押してからシーンを実行すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/e3a8e3a5-184d-43ef-29f9-a6d0d7795197.png)
コリジョンが生成されてジャンプして乗ることが出来ました！！

あとはHDAを組み直したりパラメータをいろいろ変えたりしてレベルデザインして見て下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/1c119fdb-3c05-b928-80f5-e5bd693d2d73.png)

---

結構登ったな・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/e5ca2a0b-1d71-1105-778f-61584678024d.png)

ゴールはどこだ・・・？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/30823289-af04-224b-71ac-b07b268f615a.png)
あそこか！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/3b555190-8a19-e54e-3b19-b5d25d91cb06.png)
案外これ難しいな・・・！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/ff32f544-b424-7294-8d1e-5618e35b151e.png)
最後の棒が斜面が急過ぎて滑って登れない・・・！
こんなお祈り要素満載のレベルデザインがあってたまるか・・！！ｗ

---


## まとめ
本当はジャンプアクションゲームを作るのであれば
グレイマンのジャンプ能力やパワーアップアイテムなどいろいろ考えて
決めないといけないのでしょうけど
とりあえずHDAだけでここまで簡単に出来ることが分かりました。
この記事がHoudiniEngineForUnrealEngineの
はじめの一歩を踏み出すきっかけにでもなれば幸いです。
良いお年を！

## 配布物
[HDA化する前のhipです。](https://drive.google.com/file/d/1VnNTeOW1GsSGqXfvv69tahMIM6CdcXOk/view?usp=sharing)
中のsubnetを右クリックしてCreate DigitalAssetして下さい。