Unity는 lineRenderer 및 Bezier 곡선을 기반으로 부드러운 선을 그립니다.

목차

머리말

1. 호출 방법

2. 코드 예시

효과를 얻다


머리말

단일하게 이제 제어점을 기반으로 닫히고 부드러운 곡선을 생성하고 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); 

    반환점; 
}

효과를 얻다

 

추천

출처blog.csdn.net/crb114594/article/details/130359389