效果展示:
实现如下:
首先,直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LineFourRender : MonoBehaviour
{public Transform StartNode;public Transform MidNode1;public Transform MidNode2;public Transform EndNode;public int vertexCount = 10;LineRenderer lineRen;private void Start(){lineRen = GetComponent<LineRenderer>();}private void Update(){List<Vector3> pointList = new List<Vector3>();for (float ratio = 0; ratio <= 1; ratio += 1.0f / vertexCount){if (lineRen.useWorldSpace){Vector3 tangentLineVertex1 = Vector3.Lerp(StartNode.position, MidNode1.position, ratio);Vector3 tangentLineVectex2 = Vector3.Lerp(MidNode1.position, MidNode2.position, ratio);Vector3 tangentLineVectex3 = Vector3.Lerp(MidNode2.position, EndNode.position, ratio);Vector3 bezierPoint1 = Vector3.Lerp(tangentLineVertex1, tangentLineVectex2, ratio);Vector3 bezierPoint2 = Vector3.Lerp(tangentLineVectex2, tangentLineVectex3, ratio);Vector3 bezierPoint = Vector3.Lerp(bezierPoint1, bezierPoint2, ratio);pointList.Add(bezierPoint);}else{Vector3 tangentLineVertex1 = Vector3.Lerp(StartNode.localPosition, MidNode1.localPosition, ratio);Vector3 tangentLineVectex2 = Vector3.Lerp(MidNode1.localPosition, MidNode2.localPosition, ratio);Vector3 tangentLineVectex3 = Vector3.Lerp(MidNode2.localPosition, EndNode.localPosition, ratio);Vector3 bezierPoint1 = Vector3.Lerp(tangentLineVertex1, tangentLineVectex2, ratio);Vector3 bezierPoint2 = Vector3.Lerp(tangentLineVectex2, tangentLineVectex3, ratio);Vector3 bezierPoint = Vector3.Lerp(bezierPoint1, bezierPoint2, ratio);pointList.Add(bezierPoint);}}if (lineRen.useWorldSpace){pointList.Add(EndNode.position);}else{pointList.Add(EndNode.localPosition);}lineRen.positionCount = pointList.Count;lineRen.SetPositions(pointList.ToArray());// Draw(StartNode.position,EndNode.position,GetComponent<MeshRenderer>(),0.015).transform.SetParent(this.transform);}}
接下来,把LineFourRender.cs拖拽上去:
注意:VertexCount参数决定了绳子的丝滑程度,该值越大,绳子越丝滑。
最后是对LineRenderer组件和绳子材质的调整:
附一张绳子贴图: