放在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);
}