線路を敷く:Curvy Spline を試してみた

はじめに

半年くらいぶりの投稿になります。
生活で大きな変化があり活動を休止しておりましたが、少しずつ時間をコントロールできるようになってきたので、活動を再開しました。

記事を書いている間に 2021 年になっていました^^;
どうぞ本年もよろしくお願いします。

独自の線路実装

前置きはさておき、これまで路面電車シミュレータでは線路オブジェクトを独自実装していました。
BVE の線路敷設構文を参考に、

  • 線路の長さ
  • 曲線半径
  • 勾配角度
  • 線路種別 (バラストタイプ) etc.

これらをパラメータとして設定することで、線路メッシュを生成してくれるというものです。

GameObject のパラメータ例
カーブレールも滑らかな敷設

連結リストの要領で線路オブジェクトを連結しています。
連結先は 2 個設定できて、動的に分岐もできる仕組みです。

独自実装で直面した課題

これで比較的短い区間 (函館どつく前〜十字街 約1.6km) は敷設しました。
しかし、下記のような課題に直面したため、別の実装方法を模索することにしました。

  • 並走する複線、道路も同じ方法で敷設しているので、1 つでもパラメータが変わると微調整が必要
  • GameObject が多数必要になる (管理負荷)
  • 線路を地形 (Terrain) に追従させることができない (勾配角度を手動入力)

とくに、これから実装する区間はアップダウンの大きい区間 (谷地頭方面) であるため、地形追従が必要でした。

そこで、Unity Asset Store にある Asset をつかって線路敷設を試みました。

2つの Asset を試してみる

2 つの Asset が良さげだったので、それぞれ試してみました。

Curvy Splines

Curvy Splines

EasyRoads3D

EasyRoads3D Pro v3

Curvy Splines 所感

こちらに良い記事がありましたので、これを参考に線路を敷設してみました。

https://sirohood.exp.jp/20200107-3074/

大きな流れとしては、

  1. 3D 空間に制御線(ベジェ曲線)を配置する
  2. Generator ウインドウに素材、制御線、生成方法のノードを配置する
  3. 配置したノードを線で結ぶとオブジェクトが生成される

となります。

見様見真似で、あえて起伏の激しい地形に線路を配置してみました。
期待通り、地形に追従して配置できていそうです。
実際には地形 (Terrain) に追従ではなく、制御線からみて、指定した座標軸方向に衝突したメッシュに追従する仕組みのようです。

激しい起伏にも追従できている
地形 (オブジェクト) 追従には Conform Path を使用する

当たり前ですが、1 つのGameObject (メッシュ) を制御線にそって複製配置されるので、制御線の長さの分だけ GameObject が多数複製されます。
描画負荷軽減のため、Build するまえにこれら GameObject は static 指定する必要がありそうです。

また、線路のレール部分はカスタム設定してみたのですが、なぜか枕木から離れた位置に生成されてしまいました。
色々調査・実験してみたものの、現時点で原因が分からず。。。

まとめ

今回は Curvy Splines の紹介でした。

概ね良さげなのですが、レールが期待通りの位置に配置できないことと、API 等で列車を任意の位置に配置する方法が見つからず、使用を見送ることにしました。

以上、参考になれば幸いです。
使い方についてコメント・アドバイスなどいただけると大変嬉しいです。

次回はもうひとつの線路敷設アセット EasyRoads3D を紹介します。
(EasyRoads3D の本来の用途は道路敷設です)

スポンサーリンク

Twitterでフォローしよう