Splinesパッケージを使ってスプラインを押し出して、ワイヤーやチューブなどの形状を作成してみました。
スプラインを作成
空のゲームオブジェクトを作って、「Spline Extrude」コンポーネントを付けます。
「Mesh Filter」と「Mesh Renderer」コンポーネントも追加されます。
Splinesで簡単に曲線を作るでスプラインを作成し、「Spline」にアタッチします。
スプラインの形のメッシュが表示されます。
形状をカスタマイズ
「Radius」でメッシュの太さを変えられます。
「Profile Edges」で断面の辺の数を変更できます。
「Segments Per Unit」で1ユニットの長さに含まれる辺の数を指定できます。
「Cap Ends」でメッシュの両端に辺を作ります。
閉じたスプラインでは変化ありません。
「Range」で、スプラインのどの部分を押し出すかを選択できます。「Percentage」で数値を指定できます。
UVレイアウト
マテリアルを割り当ててみると、テクスチャはほとんど歪んでいません。
「Mesh Filter」コンポーネントにメッシュが生成されているのでUVレイアウトが見れます。
押し出しメッシュの再生成
「Auto-Regen Geometry」のチェックを入れると、ターゲットのスプラインが変更されたときに、メッシュを再生成します。
「Rebuild Frequency」で1秒あたりに再生成される最大回数を指定できます。
「Spline Extrude」コンポーネントにアタッチされているスプラインをプレイ中にスクリプトで変更してみます。
using UnityEngine;
using UnityEngine.Splines;
using UnityEngine.InputSystem;
public class SplineTest : MonoBehaviour
{
// Splineコンポーネント
[SerializeField] SplineContainer splines;
void Update()
{
var current = Mouse.current;
if (current != null)
{
var leftButton = current.leftButton;
if (leftButton.wasPressedThisFrame)
{
// ノットを作成
var knot = new BezierKnot(new Vector3(0f, 10f, 0f));
// スプラインにノットを設定
splines.Splines[0].SetKnot(splines.Splines[0].Count - 1, knot) ;
}
}
}
}
「Auto-Regen Geometry」のチェックを切ると形状が変わりません。
コライダーを更新
「Spline Extrude」コンポーネントを持つゲームオブジェクトにコライダーを付けてみます。
「Update Colliders」のチェックを入れると、メッシュを押し出したときに、コライダーも更新されます。
「Auto-Regen Geometry」がオフだと、コライダーの形状も変わりません。
「Auto-Regen Geometry」がオンでも、「Update Colliders」がオフならコライダーは更新されません。