목차
머리말
단일하게 이제 제어점을 기반으로 닫히고 부드러운 곡선을 생성하고 linerenderer를 사용하여 그립니다.
1. 호출 방법
코드는 다음과 같습니다(예제). 제어점 목록을 전달하고 lineRenderer 구성 요소를 전달합니다.
DrawBezierCurve(posList, lineRender);
2. 코드 예시
/// <summary> /// 根据控制点生成对应的贝塞尔曲线 /// </summary> /// <param name="positions"></param> /// <param name="lineRenderer "></param> private void DrawBezierCurve(List<Vector3> 위치, LineRenderer lineRenderer) { if (positions.Count < 2) { 반환; } var 부품수 = 20; lineRenderer.positionCount = 0; lineRenderer.positionCount = (positions.Count - 1) * partCount ; for (int i = 0; i < position.Count - 1; i++) { Vector3 p0 = i == 0 ? 위치[0] : 위치[i - 1]; Vector3 p1 = 위치[i]; Vector3 p2 = 위치[i + 1]; Vector3 p3 = i == position.Count - 2 ? 위치[positions.Count - 1] : 위치[i + 2]; for (int j = 0; j < partCount; j++) { var t = (float)j / partCount; Vector3 point = CalculateCatMullRomPoint(t, p0, p1, p2, p3); lineRenderer.SetPosition(i * partCount + j, 가리키다); } } } /// <summary> /// 计算CatMullRomPoint /// </summary> /// <param name="t"></param> /// <param name="p0"></param > /// <param name="p1"></param> /// <param name="p2"></param> /// <param name="p3"></param> /// < 반환></반환> private Vector3 CalculateCatMullRomPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { float t2 = t * t; 플로트 t3 = t2 * t; Vector3 포인트 = 0.5f * ((2f * p1) + (-p0 + p2) * t + (2f * p0 - 5f * p1 + 4f * p2 - p3) * t2 + (-p0 + 3f * p1 - 3f * p2 + p3) * t3); 반환점; }
효과를 얻다