鳩の溜まり場

猫か鳩になりたい

Cinemachine Smooth Pathのパスに合わせて道を作る【Unity】

Smooth Pathのパスのデータを基にメッシュを生成して綺麗な道を作ります。

経緯

以前、このような記事を書きました。

mokapants.hatenablog.com

この時はパスの中心に等間隔でオブジェクトをおいて可視化するようなことをしていたのですが、以下のような弊害がでてくる実装方法でした。

  • 生成したオブジェクト同士の座標が重なっていて描画が汚い
  • タイルのようなマテリアルを貼り付けられない etc....

というわけで今回はSmooth Pathのパスのデータを基にメッシュを生成して完璧な道を作ります。

メッシュの生成について

Unityでは頂点の座標面を閉じるための頂点の結ぶ順番法線を指定することで自由な形のメッシュをコードから生成することができます。
詳細な解説は以前別の記事にまとめたので、気になる方はこちらから見てみてください〜。

mokapants.hatenablog.com

軽い解説

メッシュの生成方法がわかれば、頂点の座標を求め、扱いやすいようにデータに格納するだけです。

Cinemachine Smooth Path(正確にはCinemachine Path Base)にはパスの場所と距離の単位を指定するとその地点の座標とQuaternionを戻すメソッドがあるので使ってゴニョるとできます。 詳しくはソースコードのCalcVerticesPart関数を参照してください。

public Vector3 EvaluatePositionAtUnit(float pos, CinemachinePathBase.PositionUnits units)
public Quaternion EvaluateOrientationAtUnit(float pos, CinemachinePathBase.PositionUnits units)

docs.unity3d.com

全体のソースコード

おまけ

同じパスを使うことで一瞬でダートコースができました。
うまぴょい!