Unity画波形图——比如sine曲线

一、图的效果请添加图片描述

二、图的控制参数

  • 频率
  • 振幅
  • 移动速度
  • 点的数量

请添加图片描述

三、实现原理

LineRenderer

  • Mathf.Lerp
  • Mathf.Sin

四、代码实现

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawSineLine : MonoBehaviour
{
    /// <summary>
    /// 渲染多少个点:越多越圆润
    /// </summary>
    public int points;

    /// <summary>
    /// 振幅
    /// </summary>
    [Header("振幅")]
    public float amplitude = 1;

    /// <summary>
    /// 显示多少个周期的图形
    /// </summary>
    [Header("显示多少个周期的图形")]
    public Vector2 xLimits = new Vector2(0,1);

    /// <summary>
    /// 移动速度
    /// </summary>
    [Header("移动速度")]
    public float movementSpeed = 1;

    /// <summary>
    /// 频率
    /// </summary>
    [Header("频率")]
    public float frequency = 1;

    private LineRenderer myLineRenderer;

    // Start is called before the first frame update
    void Start()
    {
        myLineRenderer = GetComponent<LineRenderer>();
    }

    /// <summary>
    /// 画sine曲线
    /// </summary>
    private void Draw()
    {
        float xStart = xLimits.x;
        float Tau = 2 * Mathf.PI;
        float xFinish = xLimits.y;

        myLineRenderer.positionCount = points;

        for(int currentPoint = 0; currentPoint < points; currentPoint++)
        {
            float progress = (float)currentPoint / (points - 1);
            float x = Mathf.Lerp(xStart, xFinish, progress);
            float y = amplitude * Mathf.Sin((Tau * frequency*x) + (Time.timeSinceLevelLoad*movementSpeed));
            myLineRenderer.SetPosition(currentPoint,new Vector3(x,y,0));
        }
    }

    // Update is called once per frame
    void Update()
    {
        Draw();
    }
}

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值