весь алгоритм изменения цвета - PullRequest
3 голосов
/ 16 апреля 2019

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

Я думаю, нехорошо делать каждый код цвета каждый раз

Color32 color = new Color(0.5f, 1f, 0.5f, 1f); // good

но мне нужно, например, 1-й объект 255,190,0, затем 230,255,10, я имею в виду повторение цветного круга. Что я должен делать?

enter image description here

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Для того, чтобы цвета перечислялись в «радужной» последовательности, вам понадобится переключить цветовой цикл в цветовой модели HVS и преобразовать его в модель RGB для инициализации нового объекта. Обе модели, а также конверсия описаны в этой статье Википедии.

0 голосов
/ 16 апреля 2019

Сначала сделайте что-нибудь простое, сделайте это линейным.

Первый подход:

    public GameObject target;
    public int n=50;


    void Awake(){

        for(int i=0;i<n;i++)
        {
            GameObject tem=Instantite(target,new Vector3(i,0,0),Quanterion.Identity);
            if(i/7==0)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.violate;
            }
            else if(i/7==1)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.blue;
            }
            else if(i/7==2)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.indigo;
            }
            if(i/7==3)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.green;
            }
            if(i/7==4)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.yellow;
            }
            if(i/7==5)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.orange;
            }
            if(i/7==6)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.red;
            }
        }


    }

Это даст нам линейную полосу.

Теперь последний.// Также дает форму радуги, может быть, вы не спросили

    public GameObject target;
    public int n=50;
    public int r=50;//try adjusting this one, this value can also be achieved doing some calculation but I forgot them

    void Awake() {
        float deg=0;
        for(int i=0;i<n;i++)
        {
            if(i!=0)
                deg=360/(float)i;
            GameObject tem=Instantite(target,Vector3(r*Mathf.Deg2Rad*cos(deg)/2, r*Mathf.Deg2Rad*sin(deg)/2,0),Quanterion.Identity);
            if(i/7==0)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.violate;
            }
            else if(i/7==1)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.blue;
            }
            else if(i/7==2)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.indigo;
            }
            if(i/7==3)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.green;
            }
            if(i/7==4)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.yellow;
            }
            if(i/7==5)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.orange;
            }
            if(i/7==6)
            {
                tem.GetComponent<MeshRenderer>().material.color=Color.red;
            }
        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...