[UNITY]2DRPG開発日誌 #68 LineRendererで円弧を描画する

オブジェクトと「位置」「直径」「線の太さ」を同期する円弧を描画します。

こんなスクリプトを書いてオブジェクトにアタッチします。

    LineRenderer lineRenderer;
    [SerializeField] int circleRange = 380;

    private void Start()
    {
        lineRenderer = this.gameObject.AddComponent<LineRenderer>();
    }

    private void Update()
    {
        this.transform.localScale = new Vector2(this.transform.localScale.x, this.transform.localScale.x);

        float radius = this.transform.localScale.x * 1.5f;
        float lineWidth = radius * 0.1f;
        float posX = this.transform.position.x;
        float posY = this.transform.position.y;

        lineRenderer.startWidth = lineWidth;
        lineRenderer.endWidth = lineWidth;
        lineRenderer.positionCount = circleRange;

        var points = new Vector3[circleRange];

        for (int i = 0; i < circleRange; i++)
        {
            var rad = Mathf.Deg2Rad * (i * circleRange / circleRange);
            var x = posX + Mathf.Sin(rad) * radius;
            var y = posY + Mathf.Cos(rad) * radius;
            points[i] = new Vector3(x, y, 0);
        }

        lineRenderer.SetPositions(points);
    }

すると、、、

※オブジェクトの位置がわかりやすいように四角い画像オブジェクトにアタッチしています。

こんな風に描画されます。

場所、大きさもきちんと同期されています。円が小さくなると線も細くなっています。

circleRangeの値を小さくすると、弧が短くなります。

さらに回転もさせられる弧はこちらで解説