一、效果演示
开发环境:2021.3.13
项目链接:https://download.csdn.net/download/m0_50811529/89861351
二、意义
自定义颜色编辑器的开发旨在提供一个更灵活、用户友好的解决方案,使开发者能够快速、直观地处理颜色,提升工作效率。
通过构建自定义颜色编辑器,开发者可以:
- 简化工作流程:集成常用功能,让颜色选择和调整变得更加高效。
- 动态调整颜色:在任意平台上调整颜色,使颜色选择更加直观。
- 增加用户体验:允许用户根据个人喜好定制颜色设置,提升开发的乐趣和效率。
三、代码介绍
1.创建色相环及调色盘
using UnityEngine;
using UnityEngine.UI;
public class ColorPicker : MonoBehaviour
{
public RawImage _colorPalette;// HSV 控制明暗
public RawImage _hueRing; // 色相环
private Texture2D _paletteTexture;
private Texture2D _hueTexture;
private const float _innerRadiusFactor = 0.7f;
private float _currentHue = 0f; // 当前选择的色相
void Start()
{
// 生成调色盘纹理
CreatePaletteTexture();
// 生成色相环纹理
CreateHueRingTexture();
}
}
创建调色盘纹理的方法CreatePaletteTexture()
- 初始化纹理:创建一个256x256的Texture2D对象。
- 循环设置颜色:使用双重循环遍历每个像素。x轴对应饱和度,y轴对应明度,通过Color.HSVToRGB将HSV值转换为RGB颜色并设置到纹理中。
- 应用纹理:调用Apply方法更新纹理,然后将其赋值给_colorPalette。
private void CreatePaletteTexture()
{
int width = 256;
int height = 256;
_paletteTexture = new Texture2D(width, height);
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
float saturation = (float)x / width; // x 轴作为饱和度
float brightness = (float)y / height; // y 轴作为明度,调整为从上到下
Color color = Color.HSVToRGB(_currentHue, saturation, brightness);
_paletteTexture.SetPixel(x, y, color);
}
}
_paletteTexture.Apply();
_colorPalette.texture = _paletteTexture;
}
创建色相环纹理的方法CreateHueRingTexture()
- 初始化纹理:创建一个256x256的色相环纹理。
- 设置半径:计算外圈和内圈的半径。
- 循环设置颜色:遍历每个像素,计算其与中心的距离和角度。根据距离决定该像素的透明度或颜色。
- 在内圈和外圈区域设置为透明。
- 根据角度计算色相,并将颜色设置为饱和度和亮度均为1的RGB颜色。
- 应用纹理:最后,将生成的纹理应用于_hueRing。
private void CreateHueRingTexture()
{
int size = 256;
_hueTexture = new Texture2D(size, size);
float outerRadius = size / 2f;
float innerRadius = outerRadius *