03-09-2018, 07:23 PM
Another version that works with curved splines
Code:
using FluffyUnderware.Curvy;
using UnityEngine;
[RequireComponent(typeof(CurvySpline))]
[RequireComponent(typeof(EdgeCollider2D))]
[ExecuteInEditMode]
public class CurvySplineToEdgeCollider : MonoBehaviour
{
[Range(2,100)]
public int PointsCount = 20;
private EdgeCollider2D edgeCollider;
private CurvySpline spline;
void OnEnable()
{
edgeCollider = GetComponent<EdgeCollider2D>();
spline = GetComponent<CurvySpline>();
spline.OnRefresh.AddListenerOnce(OnRefresh);
RebuildCollider();
}
void OnDisable()
{
spline.OnRefresh.RemoveListener(OnRefresh);
edgeCollider = null;
spline = null;
}
private void OnRefresh(CurvySplineEventArgs arg0)
{
RebuildCollider();
}
private void RebuildCollider()
{
if(spline.Count == 0)
Debug.LogWarning("Spline should have at least one segement.");
else
{
Vector2[] newPoints = new Vector2[PointsCount];
for (int i = 0; i < PointsCount; i++)
{
float tf = (float)i / (PointsCount - 1);
Vector3 position = spline.Interpolate(tf);
newPoints[i].x = position.x;
newPoints[i].y = position.y;
}
edgeCollider.points = newPoints;
}
}
private void OnValidate()
{
if(spline)
RebuildCollider();
}
}
Please consider leaving a review for Curvy. This will help a lot keeping Curvy relevant in the eyes of the Asset Store algorithm.