突然想实现一个调色面板,然后开工...

首先找找有没有什么接口可调,木有找到,找到一些调用win32实现的本地颜色面板的调用,感觉不科学,反正多平台肯定是搞不定的。

既然没找到,还是老老实实的自己写吧,看看Texture2D的相关函数,可以绘制像素,这样就行了,基本搞定,http://docs.unity3d.com/ScriptReference/Texture2D.html

下面来说说,具体步骤:

1.创建一个颜色面板的脚本,初始化一些相关属性,Texture2D,RawImage,颜色数组等

    Texture2D tex2d;public RawImage ri;int TexPixelLength = 256;Color[,] arrayColor;// Use this for initializationvoid Start () {arrayColor = new Color[TexPixelLength, TexPixelLength];tex2d = new Texture2D(TexPixelLength, TexPixelLength, TextureFormat.RGB24,true);ri.texture = tex2d;}

2.开始计算像素的颜色,这里有一点定义需要先自己去观察一下,我看了一下ps和unity自身的调色面板,他们都是地下为黑色,左上为白色,右上为自定义颜色,我这里称他为endColor。知道四个角落的颜色后就开始计算中间像素的颜色,规律嘛,看代码或者自己看ps的调色板也能找出来。因为Texture2D建议用数组绘制像素,我就没有一个个去绘制,先把颜色装数组里吧

      Color[] CalcArrayColor(Color endColor){Color value = (endColor - Color.white) / (TexPixelLength - 1);for (int i = 0; i < TexPixelLength; i++){arrayColor[i, TexPixelLength - 1] = Color.white + value * i;}for (int i = 0; i < TexPixelLength; i++){value = (arrayColor[i, TexPixelLength - 1] - Color.black) / (TexPixelLength - 1);for (int j = 0; j < TexPixelLength; j++){arrayColor[i, j] = Color.black + value * j;}}List<Color> listColor = new List<Color>();for (int i = 0; i < TexPixelLength; i++){for (int j = 0; j < TexPixelLength; j++){listColor.Add(arrayColor[j, i]);}}return listColor.ToArray();}

3.获取到颜色数组后,就可以将他绘制tex2d上,然后显示在RawImage上,看一下绘制函数

    public void SetColorPanel(Color endColor){Color[] CalcArray = CalcArrayColor(endColor);tex2d.SetPixels(CalcArray);tex2d.Apply();}

4.在获取到相关数据后,然后可以在调用一下SetColorPanel设置为endColor设置一个颜色,比如我这里初始化为红色,感觉跟ps里的一样呢

5.除了红色我们肯定还需要调用其他颜色,于是就需要右边的颜色作为endColor的值,右边的值呢,就是RGB三原色,其他颜色也是他们的混合出来的,然后选择一个endColor左边的颜色面板就会更新新的颜色,大概看一下计算代码,其他显示都类似

    Color[] CalcArrayColor(){int addValue = (TexPixelHeight - 1) / 3;for (int i = 0; i < TexPixelWdith; i++){arrayColor[i, 0] = Color.red;arrayColor[i, addValue] = Color.green;arrayColor[i, addValue+addValue] = Color.blue;arrayColor[i, TexPixelHeight - 1] = Color.red;}Color value = (Color.green - Color.red)/addValue;for (int i = 0; i < TexPixelWdith; i++){for (int j = 0; j < addValue; j++){arrayColor[i, j] = Color.red + value * j;}}value = (Color.blue - Color.green)/ addValue;for (int i = 0; i < TexPixelWdith; i++){for (int j = addValue; j < addValue*2; j++){arrayColor[i, j] = Color.green + value * (j-addValue);}}value = (Color.red - Color.blue) / ((TexPixelHeight - 1)-addValue-addValue);for (int i = 0; i < TexPixelWdith; i++){for (int j = addValue*2; j < TexPixelHeight - 1; j++){arrayColor[i, j] = Color.blue + value * (j- addValue * 2);}}List<Color> listColor = new List<Color>();for (int i = 0; i < TexPixelHeight; i++){for (int j = 0; j < TexPixelWdith; j++){listColor.Add(arrayColor[j, i]);}}return listColor.ToArray();}

6.然后写一个Manager类,来管理一下相关的操作。

哎呀,略懒,写了基本思路就够了,代码都写得很粗糙,也没有去优化操作之类的东西。有兴趣,加一个alpha值,照着unity的调色面板做一个出来,也应该够用了。

工程:https://github.com/coding2233/UnityColor

unity使用ugui自制调色面板相关推荐

  1. 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面

    文章目录 [Unity使用UGUI实现王者荣耀UI界面(四)]游戏开始界面 1. 把一些重复的UI添加 2. 开始游戏按钮 3. 注销按钮 4. 完成 5. 打包 6. 打包完成 内 容 简 介 章节 ...

  2. Unity 之 UGUI Dropdown下拉选单组件详解

    Unity 之 UGUI Dropdown下拉选单组件详解 1,属性面板 1), Dropdown的组成 2,代码操作 3,使用实例 1), 控制菜单展开方向 4,相关扩展 1), Lua中动态添加O ...

  3. 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏

    零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...

  4. 【Unity使用UGUI实现王者荣耀UI界面(三)】登录界面以及加载界面优化

    [Unity使用UGUI实现王者荣耀UI界面(三)]登录界面以及加载界面优化 [只是用来玩玩的,不要太当真] 效果显示: zhans 1. 加载界面进度100%跳转登录界面 这个功能好做,只需要将上次 ...

  5. Unity 之 UGUI Toggle组件介绍和简例

    Unity 之 UGUI Toggle组件介绍和简例 复合组件Toggle的组成: Toggle:自身挂载Toggle组件,并且对有对子物体的引用. Background:就是个Image组件,用来当 ...

  6. 【Unity使用UGUI实现王者荣耀UI界面(二)】加载页面-静音按钮和页面完善

    效果展示 文章目录 [Unity使用UGUI实现王者荣耀UI界面(二)]加载页面-静音按钮和页面完善 1. 打开项目 2. Toggle实现打开关闭音效的功能 2.1 Toggle组件演示 2.2 使 ...

  7. Unity 之 UGUI RectTransform矩形变换组件详解

    Unity 之 UGUI RectTransform矩形变换组件详解 1,属性面板 2,详细信息 3,代码操作 4,使用实例 4.1 传说中的自适应 4.2 锚点的另一种使用方式: 4.3 蓝图和原始 ...

  8. Unity 之 UGUI Dropdown组件使用简析

    Unity 之 UGUI Dropdown组件使用简析 官方释义 示例展示 代码操作 官方源码 官方释义 官方文档:https://docs.unity3d.com/Manual/script-Dro ...

  9. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

最新文章

  1. Java多线程之线程池的使用示例
  2. matlab编写长度为100矩形序列,18春[华中师范大学]华师《Matlab基础与应用》在线作业(100分)...
  3. mitmdump 脚本使用python第三方包方法(报错:in script xxx.py: No module named ‘xxx‘)
  4. HD 2602 Bone Collector (0-1背包)
  5. 最好的船_“船”说中的美丽陶瓷
  6. 如何提高安卓代码的质量和语法
  7. django系列5.1--ORM对数据库的操作
  8. 查看数据库中的字段所在的表中或某值所在的表和字段
  9. WebSockets与服务器发送的事件/ EventSource
  10. Flutter进阶第7篇: 调用原生硬件Api实现照相机拍照和相册选择 以及拍照上传到服务器
  11. 浅谈SpringMVC的概念及执行原理
  12. 抖音矩阵源码短视频矩阵源码
  13. 编程中的快速数学公式 python
  14. 【边做项目边学Android】手机安全卫士10-设置向导之绑定SIM卡
  15. 【10. 信号量和管程】
  16. 亚临界、超临界、超超临界燃煤机组效率分别是多少?
  17. Python调用并执行javascript代码——使用Naked库
  18. web自动化测试笔记
  19. 通州区机器人比赛活动总结_2019年通州区中小学生机器人智能大赛举行
  20. matlab 局部放大

热门文章

  1. 南京智慧城市建设显成效 市民卡发卡量突破960万张
  2. 如何运行单个.vue文件
  3. MySQL_创建表,添加表注释,复制表结构
  4. 规范自己的JavaScript书写 – Dojo Javascript 编程规范
  5. python微信自动发消息_Python使用微信itchat接口实现查看自己微信的信息功能详解...
  6. eclipse (氧气版)oxygen下载
  7. 计算机图形学的进展与展望
  8. 家居:在线云设计与图纸转工厂生产数据建模数据
  9. CSS进阶(4)- 扩展内容
  10. 多少往事付东风,go with wind