Нарисуйте замкнутый круг с помощью LineRenderer - PullRequest
0 голосов
/ 05 июня 2018
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;

[RequireComponent(typeof(LineRenderer))]
public class DrawCircle : MonoBehaviour
{
    [Range(0, 50)]
    public int segments = 50;

    public bool circle = true;
    [Range(0, 50)]
    public float xradius = 15;
    [Range(0, 50)]
    public float yradius = 15;
    LineRenderer line;

    public float drawSpeed = 0.3f;

    void Start()
    {
        line = gameObject.GetComponent<LineRenderer>();

        line.positionCount = (segments + 1);
        line.useWorldSpace = false;

        StartCoroutine(CreatePoints());
    }

    IEnumerator CreatePoints()
    {
        if (circle == true)
            yradius = xradius;

        float x;
        float z;

        float change = 2 * (float)Math.PI / segments;
        float angle = change;

        x = Mathf.Sin(angle) * xradius;
        line.SetPosition(0, new Vector3(x, 0.5f, 0));

        for (int i = 1; i < (segments); i++)
        {
            x = Mathf.Sin(angle) * xradius;
            z = Mathf.Cos(angle) * yradius;

            yield return new WaitForSeconds(drawSpeed);
            line.SetPosition((int)i, new Vector3(x, 0.5f, z));

            angle += change;
        }
    }
}

При запуске игры я хочу, чтобы она начиналась с одной линии с индексом 0, проведенной уже из центра круга.Поэтому я добавил эти две строки перед циклом:

x = Mathf.Sin(angle) * xradius;
line.SetPosition(0, new Vector3(x, 0.5f, 0));

Перед добавлением этих двух строк цикл for был:

for (int i = 0; i < (segments + 1); i++)

Но теперь я хочу начать цикл с индекса 1, такЯ попытался:

for (int i = 1; i < (segments); i++)

Но это не полный раунд:

circle

Рисунок круга движется по часовой стрелке.

1 Ответ

0 голосов
/ 05 июня 2018

Вы не начинаете с 0

float angle = change; //change is > 0

Я предполагаю, что change - это 10 градусов для целей объяснения.

Из-за этого ваш первый сегмент идет отцентр, до точки 10 градусов вокруг круга.

Вы должны сделать это так:

    float angle = 0;

    x = Mathf.Sin(angle) * xradius;
    line.SetPosition(0, new Vector3(x, 0.5f, 0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...