dbrizov / NaughtyAttributes

Attribute Extensions for Unity
MIT License
4.57k stars 465 forks source link

Show if not working #387

Open fawad0dev opened 6 months ago

fawad0dev commented 6 months ago
public enum RCType
    {
        Int,
        Float,
        Bool,
        String,
        Long,
        Json
    }
    [Serializable]
    class ValueDetail<T>
    {
        public T Value;
        public T defaultValue;
    }
    [SerializeField] RCValue[] rCValues;
    [Serializable]
    class RCValue
    {
        public string key;
        public RCType valueType;
        [ShowIf(nameof(IsInt))] public ValueDetail<int> intValue;
        [ShowIf(nameof(IsInt))] public UnityEvent<int> onIntValueFetched;
        [ShowIf(nameof(IsFloat))] public ValueDetail<float> floatValue;
        [ShowIf(nameof(IsFloat))] public UnityEvent<float> onFloatValueFetched;
        [ShowIf(nameof(IsBool))] public ValueDetail<bool> boolValue;
        [ShowIf(nameof(IsBool))] public UnityEvent<bool> onBoolValueFetched;
        [ShowIf(nameof(valueType), RCType.String)] public ValueDetail<string> stringValue;
        [ShowIf(nameof(valueType), RCType.String)] public UnityEvent<string> onStringValueFetched;
        [ShowIf(nameof(valueType), RCType.Long)] public ValueDetail<long> longValue;
        [ShowIf(nameof(valueType), RCType.Long)] public UnityEvent<long> onLongValueFetched;
        [ShowIf(nameof(valueType), RCType.Json)] public ValueDetail<string> jsonValue;
        [ShowIf(nameof(valueType), RCType.Json)] public UnityEvent<string> onJsonValueFetched;
        bool IsInt() => valueType == RCType.Int;
        bool IsFloat() => valueType == RCType.Float;
        bool IsBool() => valueType == RCType.Bool;
        bool IsString() => valueType == RCType.String;
        bool IsLong() => valueType == RCType.Long;
        bool IsJson() => valueType == RCType.Json;
    }

it is still showing all fields image

TylerTemp commented 6 months ago

ShowIf is a meta-attribute, which only works under NaughtyInspector. And NaughtyInspector, only works for UnityEngine.Object

[Serializable]
class RCValue {}

unfortunately, RCValue (even with Serializable) is not a UnityEngine.Object, so in NaughtyAttributes, it won't work.

Related to #107


Update: @MuttonYung is correct. I missed the AllowNesting.

MuttonYung commented 2 months ago

You are using meta-attribute in a class which is not serialized directly. Try adding [AllowNesting] attribute together with [ShowIf]. https://dbrizov.github.io/na-docs/attributes/special_attributes/allow_nesting.html