🙆‍♀️

LineRendererでsin波書く

2022/01/02に公開

なんか無性にLineRendererで遊びたくなったので、sin波を書いてみた.

コード

public class LineMusic : MonoBehaviour
{
    [SerializeField] private LineRenderer lineRenderer;
    [SerializeField] private float cycle = 1f;
    private float previousCycle = 0f;

    private void Update()
    {
        if (Math.Abs(previousCycle - cycle) > float.Epsilon)
        {
            Render(CreateSin(256, 10f, -5f, cycle));
            previousCycle = cycle;
        }
    }

    private Vector3[] CreateSin(int size, float xLength, float xOffset, float cycle)
    {
        var points = new Vector3[size];
        for (var i = 0; i < points.Length; i++)
        {
            var v = Mathf.Sin((float) i / size * 2 * Mathf.PI * cycle);
            points[i] = new Vector3((float) i / size * xLength + xOffset, v, 0);
        }

        return points;
    }

    public void Render(Vector3[] points)
    {
        lineRenderer.positionCount = points.Length;
        lineRenderer.SetPositions(points);
    }
}

結果

https://youtu.be/3HHvqU5Ze2U

オシロスコープ感ある.
次空き時間できたら、音声ファイルデコードしてかっこよくLineRendererでビジュアライズとかしてみたいなと思った

Discussion