C# 全色变换算法

C# 全色变换算法,c#,unity3d,C#,Unity3d,每秒钟创建一个对象,我需要通过彩虹改变下一个对象的颜色。我知道如何改变一个人的颜色对象,但我需要一个正确的算法 我认为每次都制作每个颜色代码是不好的 Color32 color=新颜色(0.5f、1f、0.5f、1f);//好的 但我需要例如第一个对象255190,0,下一个230255,10,我的意思是颜色循环重复。我该怎么办 为了以“彩虹式”序列枚举颜色,您需要循环HVS颜色模型中的色调,并转换为RGB模型以初始化新对象。这两种模型以及转换都在维基百科的文章中进行了描述。首先简单化,线性化

每秒钟创建一个对象,我需要通过彩虹改变下一个对象的颜色。我知道如何改变一个人的颜色对象,但我需要一个正确的算法

我认为每次都制作每个颜色代码是不好的

Color32 color=新颜色(0.5f、1f、0.5f、1f);//好的

但我需要例如第一个对象255190,0,下一个230255,10,我的意思是颜色循环重复。我该怎么办


为了以“彩虹式”序列枚举颜色,您需要循环HVS颜色模型中的色调,并转换为RGB模型以初始化新对象。这两种模型以及转换都在维基百科的文章中进行了描述。

首先简单化,线性化

第一种方法:

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


    }
公共游戏对象目标;
公共int n=50;
无效唤醒(){

对于(int i=0;我到目前为止您尝试过什么?我们可以尝试修复您的代码,但stack不是一个代码编写服务可能相关:可能与我不久前做的类似的事情重复,我正在编写解决方案,直到那时您可以从中播放。没有。只是没有。这是一个糟糕的设计,可以更简单地用一点数学来解决。也许您错过了creat每秒生成一个对象仍然是为了颜色。每秒生成只是一个协同程序。太好了!这就是我要找的!谢谢。
m_Renderer.material.color=color.HSVToRGB(m_色调,m_饱和度,m_值);
    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;
            }
        }


    }