当前位置:首页 >教程首页 > 游戏程序 > Unity3D游戏开发工程师班 >Unity如何预定义UI?

Unity如何预定义UI?

发布时间:2022-05-09 10:41:25

Hello,大家好,有人问“Unity如何预定义UI?”今天给大家带来不写GUIEditor就能实现的预定义UI,我是麦田。

1、写在前面

出于性能原因,EditorGUILayout 函数不能与 MaterialPropertyDrawers 一起使用。

2、Enum类(枚举)

枚举,最多可指定 7 个名称。常用的枚举类如下。

当然也可以自定义枚举,可以通过KeyWrod来控制。

混合模式

[Enum(UnityEngine.Rendering.BlendOp)] _BlendOp ("BlendOp", Float) = 0

[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1

[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0

深度开关

[Enum(Off, 0, On, 1)]_ZWriteMode ("ZWriteMode", float) = 1

ZWriteMode是没有内置的,实际上也只有on和off两个状态,所以用Toogle其实也可以,我这里是直接用[Enum(Off, 0, On, 1)]这样的写法声明了个新的自定义Enum

剔除模式

[Enum(UnityEngine.Rendering.CullMode)]_CullMode ("CullMode", float) = 2

深度测试

[Enum(UnityEngine.Rendering.CompareFunction)]_ZTestMode ("ZTestMode", Float) = 4

颜色通道写入遮罩

[Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask ("ColorMask", Float) = 15

[Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp ("Stencil Comparison", Float) = 8

[Enum(UnityEngine.Rendering.StencilOp)]_StencilPass ("Stencil Pass", Float) = 0

[Enum(UnityEngine.Rendering.StencilOp)]_StencilFail ("Stencil Fail", Float) = 0

[Enum(UnityEngine.Rendering.StencilOp)]_StencilZFail ("Stencil ZFail", Float) = 0

3、IntRange

显示一个适用于 Range 着色器属性的整数滑动条。

[IntRange]_StencilWriteMask ("Stencil Write Mask", Range(0,255)) = 255

[IntRange]_StencilReadMask ("Stencil Read Mask", Range(0,255)) = 255

[IntRange]_Stencil ("Stencil ID", Range(0,255)) = 0

4、Header

显示一个头部名称。

[Header()]

[Header(A group of things)] _Prop1 ("Prop1", Float) = 0

不支持汉字,数字以及大部分符号

在着色器属性之前创建一个标题文本。

5、Space

在着色器属性之前创建垂直空间。

[Space] _Prop1 ("Prop1", Float) = 0

[Space(50)] _Prop2 ("Prop2", Float) = 0

6、KeywordEnum

关键字枚举,并启用相应的着色器关键字。它可在着色器中与“#pragma multi_compile”配合使用,以启用或禁用部分着色器代码。每个名称都将 采用“属性名”+ 下划线 +“枚举名”这种形式的大写着色器关键字。最多可提供 9 个名称。

[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0

#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY

7、Toggle类(开关)

以开关形式显示浮点值。属性值为 0 或 1,具体取决于开关状态。当开关处于打开状态时,将设置一个带有大写属性名称 +“_ON” 的着色器关键字,或者一个显式指定的着色器关键字。

[Toggle] _Invert ("Invert?", Float) = 0

[Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0

8、PowerSlider

[PowerSlider(3.0)] _Shininess ("Shininess", Range (0.01, 1)) = 0.08

显示一个具有对应于 Range 着色器属性的非线性响应的滑动条。意思就是,让Range滑杆更加方便调整细微的值。以[PowerSlider(1.0)]为分界,当值为1.0时,效果与range一致。当值<1.0时,值越大可调整的范围越大。当值>1.0时,值越小可调整的范围越大。可以更精细地在这些区间进行微调。

当值为0.1时

1.jpg

当值为10时

2.jpg

PowerSlider值类似曲线的控制值,值越大,小值的范围越好调整,值越小,大值的可调整范围越大。

学员作品赏析
  • 2014期学员黄雨婷作品

    2014期学员黄雨婷作品

  • 2103期学员沈继龙作品

    2103期学员沈继龙作品

  • 2105期学员秦洋洋作品

    2105期学员秦洋洋作品

  • 2108期学员陆昶存作品

    2108期学员陆昶存作品

  • 2107期学员赵锦威作品

    2107期学员赵锦威作品

  • 2104期学员胡婷婷作品

    2104期学员胡婷婷作品

  • 2107期学员何亮作品

    2107期学员何亮作品

  • 2103期学员张子安作品

    2103期学员张子安作品

专业问题咨询

你担心的问题,火星帮你解答
  • 画动漫人物的技巧与方法

    有很多同学想让我分享一下刻画动漫人物的技巧与方法。今天,就来教大家几个人物画法的小方法,希望能从中学到画动漫人物的技巧与方法。

  • 初学动漫人物画法步骤

    初学动漫人物画法步骤是怎么样的?今天小编就来具体说一说,作为一个初学者,在绘制动漫人物所使用到的步骤。

  • 昆明北市区素描培训机构费用

    如果你想进入美术行业、设计行业,学素描会对你的工作很有帮助!学素描可以提高的绘画能力和设计能力,进而提升你的专业水平。素描不是......

  • 自学动漫绘画应该先学什么

    自学动漫绘画应该先学什么? 所有与绘画相关的,最应该先学的是美术基础。而美术基础中最先接触到的就是透视,这是学习绘画过程中必不......

  • 南宁建筑手绘设计培训班有哪些

    如果你想成为建筑设计师,那么你需要学习建筑手绘设计。学好建筑手绘设计,会助你在建筑行业里有更好的发展。一些小伙伴问小编南宁建筑......

  • 学动漫绘画有前途吗

    学动漫绘画当然有前途了,随着我国动漫产业迅猛发展,无论是动漫还是漫画都比以往有了更大的需求,而,不论是动漫还是漫画都离不开动漫......

×