US5L6——PowerSliderDrawer和IntRangeDrawer

本章代码关键字

1
2
[PowerSlider]    // 让属性在Inspector窗口中显示为一个指数滑块,相比普通的线性滑块,它可以更方便的调整那些变化范围较大、非线性分布的参数
[IntRange] // 让属性在Inspector窗口中显示为一个整数范围滑块,使得滑块只能按整数调整

PowerSliderDrawer的使用

作用:PowerSliderDrawer​ 是 Unity 自带的继承自 MaterialPropertyDrawer​ (材质属性绘制器) 的类
使用它修饰属性,可以让该属性在 Inspector 窗口中显示为一个指数滑块,
相比普通的线性滑块,它可以更方便的调整那些变化范围较大、非线性分布的参数,
比如:当属性的值范围较大,但其效果对某些特定范围特别敏感时,可以通过 PowerSlider​ 进行更直观的调整

它和普通滑块属性的区别是:

  • 普通滑块属性默认是线性分布,即滑块的位置与参数值成正比
  • PowerSlider​ 提供了 非线性映射,适合用在参数值对效果影响不均匀的场景

我们可以用该类修饰

  1. 光照强度: 调整光的强弱(低强度变化显著,高强度变化较平滑)。
  2. 对比度: 调整图像的对比效果。
  3. 模糊程度: 调整模糊范围,尤其是高斯模糊。

等等

使用方式:

1
[PowerSlider(指数)] 属性名("显示名称", Range(最小值,最大值)) = 默认值

对应的函数曲线为:y=xny=x^n,其中:

  • xx 为滑块所在位置
  • yy 为属性的数值
  • nn[PowerSlider()]​ 内填入的指数

使用示例

1
2
3
4
5
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[PowerSlider(2)] _TestNum("TestNum", Range(0, 1)) = 0
}

显示效果(这里的指数曲线相当于 y=x2y=x^2):

image

可以看到,明显 0~0.5 占滑块的滑动范围更大

IntRangeDrawer的使用

作用:IntRangeDrawer​ 同样是 Unity 自带的继承自 MaterialPropertyDrawer​(材质属性绘制器)的类
使用它修饰属性,可以让该属性在 Inspector 窗口中显示为一个整数范围滑块,使得滑块只能按整数调整值

使用方式:

1
[IntRange] 属性名 ("显示名称", Range(最小值, 最大值)) = 默认值

使用示例:

1
2
3
4
5
6
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[PowerSlider(2)] _TestNum("TestNum", Range(0, 1)) = 0
[IntRange] _TestIntNum("TestIntNum", Range(0, 10)) = 0
}

显示效果:

image