前回に引き続き、レースゲーム等で使える曲がる道路を作っていきたいと思います。
【Unity】②標準機能だけで道路を作る「曲がる道路」編
準備:Splines を入れる
UnityのSplinesは、曲線を Unity上で作って、そこから 「位置・向き・形状」 などを取り出してゲームやツールに使えるようにする公式パッケージです。
-
Window → Package Manager
-
左上をUnity Registryを選択します
-
検索でSplinesを入力してインストールします。
まずは「線(Spline)」を描く(道路の中心線)

ヒエラルキーウィンドウから右クリックして「Spline」→「Draw Splines Tool…」をクリックします。

Sceneビューで点(Knot)を置く
-
Sceneビュー上でクリック→ 点が増えて道が伸びる
-
曲げたい点は「クリックしてドラッグ」 → 取っ手が出てカーブになる
今回は、上の画像のようなシンプルな曲線を例として進めていきます。
描き終わったら終了
-
EscでDraw Splines Tool を終了
調整する(点を動かして曲げる)

今作ったSplineオブジェクトを選択すると、上のような画像の状態になっていると思います。
シーンビューにある青い点をクリックして位置を調整しても良いですし、インスペクターからKnotの値を変えても位置の調整が出来ます。
カーブをなめらかにしたい/角ばらせたい → TangentModeを変える
画像を見てもらうと分かりますが、Linear / Auto / Bezier のボタンがありますよね。
-
Auto(いま選ばれてるやつ)
→いい感じに自動で滑らか。まずはこれでOK。 -
Bezier
→取っ手(ハンドル)を手で調整して、カーブを好きに作れる(コントロールしやすい) -
Linear
→角ばる(直線で折れる)。交差点やカクッと曲げたい時に便利。
なめらかにしたいのか、角ばらせたいのか等で選択肢が変わってくるので覚えておくと良いかと思います。
道路メッシュを作る:Spline Extrude
Splineは「線」なので、これを「道路」にするのがSplineExtrudeです。
道路用のGameObjectを作る
-
Hierarchyで右クリック → Create Empty
-
名前をRoadMeshにする(任意)
RoadMeshにSplineExtrudeを追加
-
RoadMeshを選択
-
InspectorのAdd Component →Spline Extrudeを追加
すると、Mesh Filter / Mesh Rendererも自動で付きます。
※もしRoadMeshに既にメッシュがあると Spline Extrudeが置き換えます
Source Spline Containerを指定
Spline Extrudeの項目でSource Spline Containerに、さっき作ったSpline(Spline Containerが付いてるオブジェクト)をドラッグして入れます。

「道路っぽい断面」にする(Type: Road)
Spline Extrudeには断面テンプレがあり、道路向けのType > Roadがあります。
TypeをRoadに
Spline ExtrudeのTypeをRoadに変更します。
幅を決める(Radius)
-
Radiusは「Spline(中心線)からの幅」扱いです。
-
例:道路幅7mにしたい → Radius ≒ 3.5
-
ここが「道路が太すぎ/細すぎ」の原因No.1です。
カーブをなめらかにする(Segments Per Unit)
-
Segments Per Unitを上げるとカーブが滑らかになります。
-
まずは2〜4くらいで様子見
-
ガタつくなら6〜10
-
上げすぎるとポリゴン増えて重くなるので注意
-
端をふさぐ(Cap Ends)
道の端を閉じたいならCap EndsをONにします。
一部だけ道路にしたい(Range / Percentage)
スプライン全部ではなく一部だけ出したいならRange / Percentageのfromやtoに数値を入力すればその部分だけ道路に出来ます。

ここまで設定を行うと、見た目がこのようになりました。
折角なので、前回作っておいた道路用のグレーのマテリアルをMesh RendererのMaterialsに設定して道路っぽくしておきましょう。
白線を作ってカーブに沿わせる
続いて、作成した曲線に中に白線を作ってより道路っぽくしたいと思います。
1) 白線用のオブジェクトを作る
-
Hierarchyで右クリック → Create Empty
-
名前をLine_Center(中央線)にする
2) Line_Centerに Spline Extrudeを追加
-
Line_Centerを選択
-
Inspector → Add Component → Spline Extrude
3) 同じスプラインを参照させる
Spline ExtrudeのSource Spline Containerに、Splineオブジェクトを ドラッグして入れる
→ これで白線の帯がスプラインに沿って出ます(まだ太い/細いは次で調整)
4) 白線の幅を調整する(超重要)
Spline Extrudeの設定で、白線の幅を作ります。
-
Type:RoadでOK
-
Radius:白線幅の半分
-
白線を 0.10m にしたい → Radius = 0.05
-
太め 0.15m → Radius = 0.075
-
5) 白線マテリアルを貼る
Line_CenterのMesh Renderer → Materialsに、前回作っておいた白線用のマテリアルM_Lineを入れる
6) チラつき対策:白線を少し浮かせる
白線が路面と同じ面にあると、カメラ角度でチラチラします。Line_CenterのTransformで Position Y = 0.01(路面がY=0なら)
SplineとRoadMeshとLine_Centerがそれぞれバラバラのpositionだったので、全てリセットして(0,0,0)にしました。
その上で、白線のPosition Yを0.01にしています。
7) カーブがカクカクなら(Segments Per Unit)
白線のほうも、道路と同じくらい滑らかにしたいのでSegments Per Unit を道路のRoadMeshと同じ値か、少し上げるようにします。

すると、こんな感じで白線が出てくるかと思います。
Unityの標準機能だけでも、これくらいの道路ならあっという間に作れますので、外部アセットに頼りたくない場合にはおすすめの方法です。

