Cinemachineで引いたパスを道路のように(無理やり)可視化する【Unity】
2021年6月9日追記
上位互換のものを作って公開しました〜
こんなことやります
SmoothPathで引いたパスに、こんな感じで自動的にオブジェクトを配置して無理やり道っぽく見せます。
若干無理やりな手法なため、推奨はしません。
無理やりでええから実装せねばならん時に使ってみてください。
環境
- Unity - 2019.3.0f6
- Cinemachine - 2.6.1
コード
using UnityEngine; using Cinemachine; public class DrawingRoute : MonoBehaviour { [SerializeField] CinemachineSmoothPath smoothPath; [SerializeField] CinemachinePath.PositionUnits units; [SerializeField] GameObject cube; [SerializeField] uint amount; void Start() { // 例: 3の時にこんな感じに o------o------o 両端になるようにamount-1 float interval = smoothPath.PathLength / (amount - 1); Vector3 position; Quaternion rotation; for (float pos = 0; pos <= smoothPath.PathLength; pos += interval) { position = smoothPath.EvaluatePositionAtUnit(pos, units); rotation = smoothPath.EvaluateOrientationAtUnit(pos, units); Instantiate(cube, position, rotation, transform); } } }
SmoothPath.EvaluatePositionAtUnit
作成したパスからワールド座標を取得します。
public Vector3 EvaluatePositionAtUnit(float pos, CinemachinePathBase.PositionUnits units)
- pos - パスの位置。ノーマライズ化はせず、
0 ~ SmoothPath.PathLength
の範囲 - units - SmoothPathの距離単位
SmoothPath.EvaluateOrientationAtUnit
作成したパスからワールドスペースのrotationを取得します。
public Quaternion EvaluateOrientationAtUnit(float pos, CinemachinePathBase.PositionUnits units)
- pos - パスの位置。ノーマライズ化はせず、
0 ~ SmoothPath.PathLength
の範囲 - units - SmoothPathの距離単位
注意点
最初にも述べたとおり、無理やりな手法ですので、あまり推奨はしません。
こんな感じの状態になるので、重なっている部分はギラギラします。
単色ならまだしも、テクスチャとかをはっつけてあると汚くなります。