Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 Procedural Mesh Sliceを使ってライトセーバーでメッシュを斬ってみる

UE4.13のリリースノート内に新しく、"Procedural Mesh Slice"という機能が追加されており、非常に面白そうなのでメッシュを斬ってみることにしました。
これは以前の記事でも取り上げたので、気になる方はそちらも見てください。

unrealengine.hatenablog.com

それでは早速使っていこうと思います。使用しているバージョンはUE4.13.0です。

メッシュを斬るためのライトセーバーを用意する

まずは当然プロジェクトを作成しておきます。今回は一番わかりやすいであろう、FirstPersonテンプレートを使っています。

次にライトセーバー用のメッシュを用意します。"StarterContent"が追加されていれば、その中に"Shape_NarrowCapsule"というスタティックメッシュがあるので開きます。

f:id:alwei:20160911225621p:plain

ここでコリジョンプリセットを"OverlapAll"へと変更しておきます。

f:id:alwei:20160911230703p:plain

次にライトセーバー用のマテリアルを作ります。値は適当でもいいですが、なんとなく光ってる感じにしてみます。

いい感じに光らせるマテリアルができたら、次はテンプレートに最初から用意されている、"FirstPersonCharacter"のブループリントを開いてライトセーバーを持たせます。

f:id:alwei:20160911231001p:plain

StaticMeshコンポーネントを"FirstPersonCamera"以下の階層に追加してください。ここで、"Shape_NarrowCapsule"のメッシュを選択しておきます。このままだと雪ダルマみたいですね。

f:id:alwei:20160911231844p:plain

StaticMeshコンポーネントを大体画像のように調整してみます。コリジョンプリセットを"OverlapAll"に切り替えるのを忘れずに。これでライトセーバーができました。本当はソケットのアタッチなりをやった方がいいですが、今回そこは手順として必要ないので省きます。

斬られる側のメッシュを作成

斬る側の準備はできたので、今度は斬られる側です。なんでもいいのでスタティックメッシュを開いてください。コリジョンがついていない場合は、自動生成でもいいのでコリジョンをつけてあげてください。

f:id:alwei:20160911232523p:plain

次にスタティックメッシュの設定内を弄ります。"Allow CPUAccess"というプロパティがあるので、これをチェックしてあげてください。これで斬られる側のメッシュの準備は完了です。

今度はブループリントを作成します。親クラスは"Actor"を選択し、新規ブループリントを作成してください。ここでは名前を"SliceMeshBP"としました。そのままブループリントを開いてください。

f:id:alwei:20160911233324p:plain

StaticMeshコンポーネントをブループリントに追加します。そしてStaticMeshを設定し、コリジョンプリセットも"NoCollision"に設定します。更に"Rendering"の"Hidden in Game"にチェックをつけておくのを忘れないでください。

f:id:alwei:20160911234016p:plain

更に"ProceduralMesh"コンポーネントを追加します。今回の最も重要なカギを握るコンポーネントです。詳細から"Procedural Mesh"の"Use Complex as Simple Collision"のチェックは外しておきます。"Physics"の"Simulate Physics"にはチェックを入れておきます。コリジョンプリセットが"BlockAll"になっていることも確認しておいてくさい。デフォルトのままであれば、"BlockAll"になっているはずです。

ここまで出来れば次はイベントグラフでノードを組みます。

f:id:alwei:20160911235336p:plain

まずはEvent BeginPlayで"Copy Procedural Mesh from Static Mesh Component"ノードでメッシュをコピーしておきます。これは本来本体となるメッシュとは別にProcedural Meshを作成して、そちらにメッシュのコピーを作成しておくためです。コリジョンも生成するので、"Create Collision"にチェックをつけておいてください。

f:id:alwei:20160911235623p:plain

"ProceduralMesh"コンポーネントに対して、"OnComponentBeginOverlap"イベントを作成します。これが実際に触れた際にメッシュを斬るためのイベント発生源となります。ここから、"Slice Procedural Mesh"ノードでメッシュを斬ることになります。

"In Proc Mesh"に"Procedural Mesh"を設定し、"Plane Position"に"Other Comp"のワールド位置を渡します。"Plane Normal"はひとまずYを"1.0"と設定しておきます。本来は入射角からの正しい法線を渡してあげる必要があります。"Create Other Half"にはチェックをつけておきます。"Cap Option"は完全に新しい断面を生成するために"Create New Section for Cap"を設定します。最後に"Cap Material"にはメッシュの断面になった部分に適用するマテリアルです。ここでは色を変えただけのライトセーバーのマテリアルを適用しています。

最後に戻り値となる、"Out Other Half Proc Mesh"が新たに生成されたメッシュとなりますので、これに対して、"Set Simulate Physics"で物理シミュレーションをさせるように設定しておきます。

これで全て完成です!!

実際に斬ってみる!

さぁそれでは実際に斬ってみましょう!!

スパっと斬ってみた。

f:id:alwei:20160912000822p:plain

現在は入射角が縦に固定されているので、それ以外の方向から斬ることはできませんが、見事にスッパリと斬れました!!注意しなければならないのは、斬ってから新たに生成されたメッシュに対しては更に斬ることができないことです。この辺りは更に斬れるように設定を施さなければなりません。

ただ斬れるようになるだけでもとても楽しいのは間違いありません!!使うだけであればそこまで難しくないので、ぜひProcedural Mesh Sliceを使って色々なモノを斬ってみてください!