全色转换算法

时间:2019-04-16 10:52:12

标签: c# unity3d

每秒钟创建一个对象,我需要通过彩虹更改每个下一个对象的颜色。我知道如何更改自己的颜色对象,但是我需要一种算法来做到这一点

我认为每次方便地编写每个颜色代码都不方便

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

但是我需要第一个对象255,190,0,接下来的230,255,10,我的意思是色环重复。我该怎么办?

enter image description here

2 个答案:

答案 0 :(得分:2)

为了使颜色按“彩虹”顺序枚举,您需要在HVS颜色模型中循环色相并转换为RGB模型以初始化新对象。 this Wikipedia文章中介绍了这两种模型以及转换。

答案 1 :(得分:-1)

首先简化一些事情,使其线性化。

第一种方法:

    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;
            }
        }


    }