Unity 使用LineRenderer制作模拟2d绳子

效果展示:

 实现如下:

首先,直接上代码:

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组件和绳子材质的调整:

附一张绳子贴图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林枫依依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值