BLOGブログ

2021.08.05UE4UE/ 初心者向け

[UE4]スプラインでお手軽に道を作る

 

執筆バージョン: Unreal Engine 4.26

第16回ぷちコンのテーマは「みち」です!

それに合わせて今回は簡単に道を作る方法を紹介します。

以下のように、道を簡単にグニグニ編集することができるものです!

BPの全体像は以下のようにシンプルなものです。

 

 

これからアセットを作っていきますが、何をすればよいのでしょうか?

やることは大きく分けて2つです。

  • スプラインの作成(曲線を作る)
  • スプラインに沿って、道のメッシュを割り当てる

では、早速作っていきましょう!

 

道のアセット確保

ベースとなる道のStatic Meshを用意します。今回はContentsExampleから用意しました。

ContentsExampleはEpic Games Launcherのラーニングタブ・機能別サンプルにあります。

道のアセットは、  SM_Streetという名前です。

機能別サンプルとは別に用意したプロジェクトにアセットを作る場合は、アセットアクションから移行しましょう。

[UE4] 他プロジェクトからアセットを移動させる方法

 プロシージャル道アクターの作成

まずは元となるActorを用意します。コンテンツブラウザ内のAdd/Importをクリックして、Actorを選びます。

 

Actorの名前も変えておきましょう。今回はProceduralRoadとしました。

作成したAcorを開いて、Spline コンポーネントを追加します。

 

Spline(スプライン)とは?

UEではポイントと、ポイント間を結ぶセグメントからなる曲線として扱われます。

例えば以下のスプラインは5つのポイントと4つのセグメントを持ちます。

UEでは、Splineコンポーネントとして扱うことができます。

ポイントの座標など、さまざまな要素をBP上から操作することができます。

ややこしいですが、ほかに似たものにランドスケープスプラインや、スプラインメッシュが存在しますがこれらはすべて別物です。

 

では、実際にSplineを追加しましょう。左上にある、Add Componentから、

Splineと検索し、Splineコンポーネントを追加します。

Splineコンポーネントが追加されました!

今回は、ゲーム中にこの道が動くことはないので、DefaultSceneRootのMobilityを、Staticに変更します。右側のDetailsタブから変えておきましょう。

では、実際に行う処理をConstructionScriptに書いていきます。

 

ConstructionScript(コンストラクションスクリプト)とは?

ブループリント アクターが持つ特別な関数です。

この関数は呼び出されるタイミングが他とは違います。

公式ドキュメントには、クラスのインスタンス作成時に呼び出されると書いてあります。

呼び出しタイミングについて厳密に考えるとちょっと話が複雑になってしまうので、大雑把ですがそのBPを編集したときに呼び出される、くらいに思っておきましょう。

ランタイムだけでなくエディタで作業中にも呼び出されます。

つまり、そのBPをコンパイルしたり、座標や変数などの値を弄った瞬間にも呼び出されます。

 

まずはConstructionScriptタブを開きましょう。左側のFunctionsから選ぶか、上側のタブから選びます。

最初に、Splineの位置を合わせる処理を書きます。

また、Spline mesh をセグメントごとにくっつけたいので、そのためのループ処理を書きます。

ループ処理の中身を書いていきます。

まずはSpline meshコンポーネントを追加しましょう。

Spline mesh(スプラインメッシュ)とは?

スタティックメッシュを、スプラインのように自由に伸びたり曲げたりさせる機能です。こちらもコンポーネントとして扱われます。

機能別サンプルには、真っ直ぐなパイプをぐにゃぐにゃと曲げるサンプルがあります。

Spline meshをBPから追加するには、Add Spline Mesh Componentを使います。

作成したSpline meshを、Splineにくっつけましょう。

Spline meshに、先ほど用意した道のメッシュを割り当てます。

TargetにはAdd Spline Mesh Componentで生成したコンポーネントを、New MeshにSM_Streetを指定します。

 

Spline meshをSplineに沿って曲げる処理を書きます。Get Location and Tangent at Spline Pointを使ってSplineのポイント毎の座標と勾配を取得します。

それをSet Start and Endを使って、Spline meshの先端と終端に渡してあげます。

この状態で一度コンパイルして、適当なシーンに配置してみましょう。

やや、道メッシュの向きとSplineの向きがあっていません。これを直しましょう。

Set Forward Axisを使って、向きを変えておきます。

これで道路の向きが合いました!あとはSplineをぐりぐり動かせば道もぐりぐり動きます。

新しいSplineのポイントは、Splineを右クリックすることで追加することができます。

さて、道ができたのでこの上を歩きたくなってきました。ThirdParsonTemplateのデフォルトシーンに作った道を置いて、歩いてみましょう。

なんと!貫通してしまい歩けません。これは、道にコリジョンが設定されていないからです。

コリジョンの設定をしていきましょう。

まずはベースとなる道のメッシュ、SM_Streetを編集します。

右側Detailタブの、Collision Complexityから、Use Complex Collision as Simpleを選択します。これで、スタティックメッシュのメッシュそのものがコリジョン判定に使われます。

次に、ProceduralRoad内部の処理を変更します。Set Collision Enabledを使って、生成したSpline meshにコリジョンを設定しましょう。

これで全部の処理ができました!

全体像は以下のようになります。

 

これで適当に道をぐにぐに編集して、歩いてみましょう。

無事歩けました!これで自由に道が作れるようになりました。