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

效果展示:

实现如下:

首先,直接上代码:

cs 复制代码
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组件和绳子材质的调整:

附一张绳子贴图:

相关推荐
天人合一peng8 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
_乐无9 小时前
Unity加载gly 点云 高斯泼溅渲染
unity
坚定信念,勇往无前9 小时前
unity发布BuildWebGL.wasm 加载过慢
unity·wasm
avi911114 小时前
Unity Data Excel读取方法+踩坑记;和WPS Excel的一些命令
unity·游戏引擎·excel·wps·data
郁闷的网纹蟒14 小时前
虚幻5---第12部分---蒙太奇
开发语言·c++·ue5·游戏引擎·虚幻
天人合一peng15 小时前
Unity 中Canvas 或image打勾时不显示
unity
淡海水2 天前
【节点】[Houndstooth节点]原理解析与实际应用
unity·游戏引擎·shadergraph·图形·houndstooth
微:xsooop2 天前
iOS上架被拒4.3(a) 10次到过审历程
flutter·unity·ios·uniapp
DoomGT3 天前
Physics Simulation - Hit Event的触发机制
ue5·游戏引擎·虚幻·虚幻引擎·unreal engine
jtymyxmz3 天前
《Unity Shader》14.1 卡通风格的渲染
unity·游戏引擎