Unity:实现调色板

放在unity中的plugins文件夹下

using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;

 [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]

public class CHOOSECOLOR
{
    public Int32 lStructSize;
    public Int32 hwndOwner;
    public Int32 hInstance;
    public Int32 rgbResult;
    public IntPtr lpCustColors;
    public Int32 Flags;
    public Int32 lCustData;
    public Int32 lpfnHook;
    public Int32 lpTemplateName;
}

public class DllTest
{
      [DllImport("comdlg32.dll",CharSet=CharSet.Auto)]
      public static extern bool ChooseColorA( CHOOSECOLOR pChoosecolor);//对应的win32API
     public static bool ChooseColorA1(CHOOSECOLOR pChoosecolor)
    {
       return    ChooseColorA( pChoosecolor);
    }    
}
 public struct  Color1
{
    public    float r;
    public float g;
    public float b;
    public float a;
}

if(GUI.Button(new Rect(150,0,100,35),"OpenColor"))
{
             CHOOSECOLOR choosecolor = new CHOOSECOLOR();
            choosecolor.lStructSize = Marshal.SizeOf(choosecolor);
            choosecolor.hwndOwner =0;
            choosecolor.rgbResult = 0x808080;//颜色转成int型
            choosecolor.lpCustColors = Marshal.AllocCoTaskMem(64);
            choosecolor.Flags =0x00000002|0x00000001;
            if( DllTest.ChooseColorA1( choosecolor))
            {
                a=choosecolor.rgbResult;//获取int型颜色值  rgba由这个值组成
               colorStr=Convert.ToString(a,16);//十进制转化十六进制  每两个字符代表一个颜色值  顺序从左到右依次为RGB
              color.b=Convert.ToInt32(colorStr.Substring(0,2),16)/255f; 
             color.g=Convert.ToInt32(colorStr.Substring(2,2),16)/255f; 
             color.r=Convert.ToInt32(colorStr.Substring(4,2),16)/255f;
            }
        }
        GUI.Label(new Rect(0,30,500,30),"aaaa:"+colorStr+":::"+colorStr.Substring(0,2)+" : "+colorStr.Substring(2,2)+" : "+colorStr.Substring(4,2));
        GUI.Label(new Rect(0,70,500,30),"aaaa:"+colorStr+":::"+Convert.ToInt32(colorStr.Substring(4,2),16)+":"+Convert.ToInt32(colorStr.Substring(2,2),16)+ ":"+Convert.ToInt32(colorStr.Substring(0,2),16));
        plane.renderer.material.color=new Color(color.r,color.g,color.b);
    }



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值