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

附一张绳子贴图:

相关推荐
AA陈超14 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-29 属性信息委托
c++·游戏·ue5·游戏引擎·虚幻
AA陈超16 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-31 映射标签到属性
c++·游戏·ue5·游戏引擎·虚幻
gshh__16 小时前
SuperMap Hi-Fi 3D SDK for Unreal 使用蓝图接口加载多源数据
ue5·游戏引擎·supermap
小时候的阳光16 小时前
Cocos Creator 和 Unity 3D 编辑界面字体样式大小调整
unity·cocos2d·字体大小
ellis197017 小时前
Lua代码混淆-Prometheus方案教程
unity·lua
EQ-雪梨蛋花汤18 小时前
【MRTK3踩坑记录】Unity 2022 中 MRTK3 Input Simulator 无法使用 WASD 控制相机的完整排查记录
数码相机·unity·游戏引擎
星夜泊客1 天前
Unity 游戏开发中的防御性编程与空值处理实践
unity·设计模式·游戏引擎
mit6.8241 天前
[无人机sdk] Open Protocol | 协议包构造&验证
游戏引擎·无人机·cocos2d
tealcwu1 天前
【Unity踩坑】Unity测试用例命名空间错误解决方案
unity·游戏引擎·测试用例
AA陈超2 天前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-28 构建属性菜单小部件控制器
c++·游戏·ue5·游戏引擎·虚幻