как установить логическое свойство в Unity3D cgprogram shader?

Я пишу шейдер для unity3d, и я хочу указать свойства шейдера в i.e как -

Shader "GraphicsQuality/MediumScan" {
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1)
    _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
    _MainTex ("Base (RGB) RefStrGloss (A)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
    _RimColor ("Rim Color", Color) = (0.48,0.78,1.0,0.0)
    _RimPower ("Rim Power", Range(0,8.0)) = 3.0
}

но эти свойства для цвета, диапазона, float и т. д., Но я хочу ввести логическое значение, как я могу это сделать, я попробовал что-то вроде -

Properties{
    _MainTex ("Particle Texture", 2D) = "white" {
    _isBending("is Bending",bool) = true
}
SubShader{
        Pass{
            CGPROGRAM

                #pragma vertex vert
                #pragma fragment frag

                sampler2D _MainTex;
                bool _isBending;
.......continuing

но это не работает, я не могу получить логическое свойство "_isBending", и вместо этого я получаю ошибку в строке

  _isBending("is Bending",bool) = true

2 ответов


[MaterialToggle] _isBending("is Bending", Float) = 0

или

[Toggle] _isBending("is Bending", Float) = 0

по крайней мере, у вас будет визуальная кнопка переключения.


логические значения не поддерживаются в свойствах шейдера Unity. Чтобы обойти это, попробуйте использовать float. Смотрите эту страницу для получения дополнительной информации: http://docs.unity3d.com/Documentation/Components/SL-Properties.html