読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

曲線の描画とコライダーの設定【Unity】【アセット】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.0f4 Personal

はじめに

今回は任意の曲線を描画し、かつ、その曲線にコライダーを設定する、みたいな記事です。

イメージとしては以下の通りです。


f:id:kan_kikuchi:20160113225221g:plain


CurveBar

それではさっそくコードです。



使い方ですが、まず上記のCurveBarを適当なオブジェクトに付けます。

この時、同時にLineRendererPolygonCollider2Dもアタッチされます。


次にベイズ曲線を直感的に描けるアセット、Bezier Curve Editor(無料)をインポートし、

ExampleシーンにあるZ-Ringというオブジェクトを

コピーしてきて、BezierCurveのCloseをオフにします。


f:id:kan_kikuchi:20160113135556j:plain


これをCurveBar をアタッチしたオブジェクトの子に置き、

さらにInspectorからBezierCurveをCurveBarに登録します。


f:id:kan_kikuchi:20160113134020j:plain


これでCurveBarのAdjustを押せば、BezierCurveで作成した曲線に合わせて、

LineRendererとPolygonCollider2Dが調整されます。


f:id:kan_kikuchi:20160113134503j:plain


また、CurveBarの

ColliderThicknessでコライダーの太さ

LineThicknessRateでコライダーに対する線の太さ

PointIntervalで線やコライダーの点の間隔

を調整できます。


f:id:kan_kikuchi:20160113225309g:plain


コード説明

詳細な説明は省きますが、流れとしては

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()); 



おわりに

使い所はかなり限られますが、それなりに便利かと思います。

というよりBezier Curve Editorがめちゃ便利、無料だし(:3っ)∋〜