Как я могу найти наибольшее значение из списка с плавающей запятой и получить индекс значения, а затем нарисовать круг?

avatar
Daniel Lip
7 апреля 2018 в 23:36
70
1
-1
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

[RequireComponent(typeof(LineRenderer))]
public class DrawCircle : MonoBehaviour
{
    [Range(0, 50)]
    public int segments = 50;
    [Range(0, 50)]
    public float xradius = 5;
    [Range(0, 50)]
    public float yradius = 5;
    public bool minimumRequireRadius = false;
    LineRenderer line;
    private List<float> radiusList = new List<float>();

    void Start()
    {
        HighestRadius(transform);
        float highest = radiusList.Max();
        float resultRadius = radiusList[5] / 4;
        xradius = resultRadius;
        yradius = resultRadius;

        line = gameObject.GetComponent<LineRenderer>();
        line.positionCount = segments + 1;
        line.useWorldSpace = false;
        CreatePoints();
    }

    void Update()
    {
        CreatePoints();
    }

    void CreatePoints()
    {
        float x;
        float y;
        float z;

        float angle = 20f;

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

            line.SetPosition(i, new Vector3(x, 0, z));

            angle += (360f / segments + 1);
        }
    }

    private void HighestRadius(Transform root)
    {
        foreach (Transform child in root)
        {
            HighestRadius(child);

            var rend = child.GetComponent<Renderer>();
            if (rend != null)
            {
                var rends = child.GetComponent<Renderer>().bounds.size.x;
                radiusList.Add(rends);
            }
        }
    }
}

В этой части:

float highest = radiusList.Max();
float resultRadius = radiusList[5] / 4;

Я хочу получить наибольшее значение из списка, в данном случае это 407, и это немного странно. Когда я перебираю дочерние элементы в этом цикле HighestRadius, одно из значений размеров равно 407. Но все объекты даже не близки по размеру к 100.

Затем я хочу получить результатRadius:

float resultRadius = radiusList[5] / 4;

Так будет: float resultRadius = наивысший / 4;

Последнее, что нужно установить xradius и yradius в resultRadius и нарисовать круг. Но я не уверен, что деление на 4 — правильный способ сделать это.

Источник

Ответы (1)

avatar
sjb-sjb
8 апреля 2018 в 23:59
0

Ну... несколько комментариев:

  • Вы берете границы Renderers, прикрепленных к Transform, что кажется мне немного странным. Учитывая, что визуализатор представляет объект в пространстве, не лучше ли начать с визуализатора и просто взять его границы? Тогда нет необходимости действовать иерархически. В вашем коде не указано, откуда происходит «преобразование» в методе Start. Для меня было бы разумнее передать Renderer в конструктор класса.

  • В выражении angle += (360f / сегменты + 1) вы делите на «сегменты», а затем добавляете 1. Не хотите ли вы вместо этого разделить на (сегменты + 1)?