Hi,
I got a question from a user about how to convert a spline to 2D Edge collider. I wrote a small script for him that does so. I post it here, maybe it will help someone else:
I got a question from a user about how to convert a spline to 2D Edge collider. I wrote a small script for him that does so. I post it here, maybe it will help someone else:
Code:
using FluffyUnderware.Curvy;
using UnityEngine;
[RequireComponent(typeof(CurvySpline))]
[RequireComponent(typeof(EdgeCollider2D))]
[ExecuteInEditMode]
public class CurvySplineToEdgeCollider : MonoBehaviour
{
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.Interpolation != CurvyInterpolation.Linear)
Debug.LogWarning("Spline's interpolation should be Linear. Current value is " + spline.Interpolation);
if(spline.ControlPointCount < 2)
Debug.LogWarning("Spline should have at least two points. Current count is " + spline.ControlPointCount);
else
{
Vector2[] newPoints = new Vector2[spline.ControlPointCount];
for (int i = 0; i < newPoints.Length; i++)
{
newPoints[i].x = spline.ControlPoints[i].transform.localPosition.x;
newPoints[i].y = spline.ControlPoints[i].transform.localPosition.y;
}
edgeCollider.points = newPoints;
}
}
}
Please consider leaving a review for Curvy, this helps immensely. Thank you.
Available for freelance work—feel free to reach out.
Available for freelance work—feel free to reach out.