如何从浮动列表中找到最高值并获取值索引然后绘制一个圆圈?

时间:2018-04-07 23:36:57

标签: c# unity3d

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。

然后我想得到resultRadius:

float resultRadius = radiusList[5] / 4;

所以它将是:float resultRadius = highest / 4;

最后一件事是将xradius和yradius设置为resultRadius并绘制一个圆。但我不确定将它除以4是正确的方法。

1 个答案:

答案 0 :(得分:0)

嗯......一些评论:

  • 你正在使用附加到变换器的渲染器的边界,这对我来说似乎有些奇怪。鉴于渲染器代表了太空中的物体,从渲染器开始并简单地采用它的界限是不是更有意义呢?那么就没有必要按层次进行。您的代码并未说明&#34;转换&#39;来自Start方法。将Renderer交给类的构造函数对我来说更有意义。

  • 在表达式角度+ =(360f / segments + 1)中,除以&#34; segment&#34;然后加1.你不想除以(段+ 1)吗?