関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2021.08.05UE4UE/ 初心者向け
執筆バージョン: Unreal Engine 4.26 |
第16回ぷちコンのテーマは「みち」です!
それに合わせて今回は簡単に道を作る方法を紹介します。
以下のように、道を簡単にグニグニ編集することができるものです!
BPの全体像は以下のようにシンプルなものです。
これからアセットを作っていきますが、何をすればよいのでしょうか?
やることは大きく分けて2つです。
では、早速作っていきましょう!
ベースとなる道のStatic Meshを用意します。今回はContentsExampleから用意しました。
ContentsExampleはEpic Games Launcherのラーニングタブ・機能別サンプルにあります。
道のアセットは、 SM_Streetという名前です。
機能別サンプルとは別に用意したプロジェクトにアセットを作る場合は、アセットアクションから移行しましょう。
まずは元となるActorを用意します。コンテンツブラウザ内のAdd/Importをクリックして、Actorを選びます。
Actorの名前も変えておきましょう。今回はProceduralRoadとしました。
作成したAcorを開いて、Spline コンポーネントを追加します。
UEではポイントと、ポイント間を結ぶセグメントからなる曲線として扱われます。
例えば以下のスプラインは5つのポイントと4つのセグメントを持ちます。
UEでは、Splineコンポーネントとして扱うことができます。
ポイントの座標など、さまざまな要素をBP上から操作することができます。
ややこしいですが、ほかに似たものにランドスケープスプラインや、スプラインメッシュが存在しますがこれらはすべて別物です。
では、実際にSplineを追加しましょう。左上にある、Add Componentから、
Splineと検索し、Splineコンポーネントを追加します。
Splineコンポーネントが追加されました!
今回は、ゲーム中にこの道が動くことはないので、DefaultSceneRootのMobilityを、Staticに変更します。右側のDetailsタブから変えておきましょう。
では、実際に行う処理をConstructionScriptに書いていきます。
ブループリント アクターが持つ特別な関数です。
この関数は呼び出されるタイミングが他とは違います。
公式ドキュメントには、クラスのインスタンス作成時に呼び出されると書いてあります。
呼び出しタイミングについて厳密に考えるとちょっと話が複雑になってしまうので、大雑把ですがそのBPを編集したときに呼び出される、くらいに思っておきましょう。
ランタイムだけでなくエディタで作業中にも呼び出されます。
つまり、そのBPをコンパイルしたり、座標や変数などの値を弄った瞬間にも呼び出されます。
まずはConstructionScriptタブを開きましょう。左側のFunctionsから選ぶか、上側のタブから選びます。
最初に、Splineの位置を合わせる処理を書きます。
また、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にコリジョンを設定しましょう。
これで全部の処理ができました!
全体像は以下のようになります。
これで適当に道をぐにぐに編集して、歩いてみましょう。
無事歩けました!これで自由に道が作れるようになりました。