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

附一张绳子贴图:

相关推荐
winlife_12 小时前
在 Unity 里用 AI 做游戏:funplay-unity-mcp 从安装到第一次让 AI 改场景
人工智能·游戏·unity·ai编程·claude·mcp
qq_2052790513 小时前
Unity 运行时候会时不时卡顿一下,哪怕是空场景
unity·游戏引擎
美团骑手阿豪16 小时前
Unity UGUI自适应分辨率
unity·游戏引擎
LONGZETECH17 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
winlife_18 小时前
让 AI 跑通“调跳跃手感“的完整闭环:funplay-unity-mcp 实战案例
人工智能·unity·游戏引擎·ai编程·mcp·游戏手感
winlife_18 小时前
从一句话到可玩原型:用 funplay-unity-mcp 让 AI 搭起完整游戏循环
人工智能·游戏·unity·ai编程·mcp·游戏原型
ellis197021 小时前
Unity中使用Cursor辅助开发
unity
avi91111 天前
Unity商业插件之(三) Editor扩展,二次开发
unity·单例·editor扩展·editor开发
winlife_1 天前
让 AI 自动跑 PlayMode 回归测试:从 BUG 注入到自动判 FAIL 的完整闭环
人工智能·unity·bug·ai编程·mcp·回归测试·游戏测试
WarPigs2 天前
游戏签到系统
unity