この記事でのバージョン
Unity 5.3.0f4 Personal
はじめに
今回は任意の曲線を描画し、かつ、その曲線にコライダーを設定する、みたいな記事です。
イメージとしては以下の通りです。
CurveBar
それではさっそくコードです。
使い方ですが、まず上記のCurveBarを適当なオブジェクトに付けます。
この時、同時にLineRendererとPolygonCollider2Dもアタッチされます。
次にベイズ曲線を直感的に描けるアセット、Bezier Curve Editor(無料)をインポートし、
ExampleシーンにあるZ-Ringというオブジェクトを
コピーしてきて、BezierCurveのCloseをオフにします。
これをCurveBar をアタッチしたオブジェクトの子に置き、
さらにInspectorからBezierCurveをCurveBarに登録します。
これでCurveBarのAdjustを押せば、BezierCurveで作成した曲線に合わせて、
LineRendererとPolygonCollider2Dが調整されます。
また、CurveBarの
ColliderThicknessでコライダーの太さを
LineThicknessRateでコライダーに対する線の太さを
PointIntervalで線やコライダーの点の間隔を
を調整できます。
コード説明
詳細な説明は省きますが、流れとしては
BezierCurveのGetPointAtを使って曲線の座標を取得し、
//0(始点)~1(終点)間の座標を取得 Vector2 point = (Vector2)(_bezierCurve.GetPointAt ((float)i / (float)pointNum) - transform.position);
その座標を調整した後、PolygonCollider2Dのpointsを設定、
//コリジョン設定 (setPointListはList<Vector2> )
gameObject.GetComponent<PolygonCollider2D>().points = setPointList.ToArray();
さらにLineRendererのSetPositionsを設定しています。
//rendererPointsはList<Vector3> //点の数を設定 renderer.SetVertexCount (rendererPoints.Count); //点の座標を設定 renderer.SetPositions (rendererPoints.ToArray());