Unity 如何使随机颜色更粉嫩

本文介绍在Unity中如何通过限制RGB值范围和随机分配特定颜色值来生成粉嫩色调。提供了三种方法:直接使用switch语句分配颜色,利用列表进行随机选择,以及采用洗牌算法提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity 如何使随机颜色更粉嫩

先上对比图:
  1. ↓RGB都在0-255之间随机 (0-255, 0-255, 0-255)
    在这里插入图片描述
  2. ↓RGB都在150-255之间随机, 就是偏灰白的 (150-255, 150-255, 150-255)
    在这里插入图片描述
  3. ↓RGB随机分配这3个值: 255, 150, 150-250(随机), 就会粉粉嫩嫩的
    如: (255, 150, 200), (150, 170, 255), (240, 255, 150)等
    在这里插入图片描述

代码:

方法1↓ 直接手写switch, 一共6种分配方式

    float r, g, b;
    Color GetRandomColor()
    {
        //定义3个颜色备用
        float c1 = 1f;
        float c2 = 150 / 255f;
        float c3 = Random.Range(150 / 255f, 1f);
        //将3个颜色随机分配给R,G,B
        int choose = Random.Range(0, 6);
        switch (choose)
        {
            case 0:
                r = c1; g = c2; b = c3; break;
            case 1:
                r = c1; g = c3; b = c2; break;
            case 2:
                r = c2; g = c1; b = c3; break;
            case 3:
                r = c2; g = c3; b = c1; break;
            case 4:
                r = c3; g = c1; b = c2; break;
            case 5:
                r = c3; g = c2; b = c1; break;
        }
        return new Color(r, g, b);
    }

方法2↓ 条条大路通罗马, 用列表也能达到同样的效果, 用的是Add和Remove

	//定义3个颜色备用
	float c1 = 1f;
	float c2 = 150 / 255f;
	float c3 = Random.Range(150 / 255f, 1f);
	//将3个颜色随机分配给R,G,B
	List<float> ListRandom = new List<float>() { c1, c2, c3 };
    List<float> ListRGB = new List<float>();
    for (int i = 0; i < 3; i++)
    {
    	ListRGB.Add(ListRandom[Random.Range(0, ListRandom.Count)]);
    	ListRandom.Remove(ListRGB[i]);
    }
	return new Color(ListRGB[0], ListRGB[1], ListRGB[2]);

方法3↓ 改了一版, 用的是Insert(洗牌算法). 提高了效率. (但效率最高的还是手写switch)

    float[] rgbTemp = new float[3] { 1f, 1f, 150 / 255f };
    List<float> randomColor = new List<float>();
    Color GetRandomColor()
    {
        rgbTemp[0] = Random.Range(150 / 255f, 1f);
        randomColor.Clear();
        //将3个颜色随机分配给R,G,B
        for (int i = 0; i < 3; i++)
        {
            int randomIndex = Random.Range(0, randomColor.Count + 1);
            randomColor.Insert(randomIndex, rgbTemp[i]);
        }
        return new Color(randomColor[0], randomColor[1], randomColor[2]);
    }

不过, 每种颜色都随机, 就没法渲染合批了(除非用GPU Instancing)
为了避免渲染消耗, 一般的思路是在几个固定的材质中做随机.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值