Creating a delegate that accept a ref from a struct method
Hi !
I am working within Unity but this is a C# question. I am trying to implement attributes that alter the appearance of fields in the inspector depending on a condition passed as string. The condition may be a field, a property or a method, which MemberInfo is fetched through reflection. My previous was working in most scenarios except for the case where the attribute is applied on struct's member (which makes sense since struct are not supposed to be mutable).
Since my end users may do some shenanigans with struct, I searched a solution and found this post : https://stackoverflow.com/a/1212396
So I tried to adapt it to my needs but I get this error :
Since the post is pretty old, my question is: is the answer from the post still valid ?
Here is my implementation :
And the current attribute setup:
8 Replies
cant you just do
Action<Span<T>>
?
also plain c# delegates cant be serialized in unity
that said pass your struct as span insteadI'm not trying to serialize the delegate. It just creates a schedule in the inspector that will call the getter (ShowIf in the example) and then invoke a callback using the output.
hmmm.. seems like you're avoiding custom editor here, right?
Yes. It's for people who want quick formatting without inspector code or Odin.
sorry for ruining the party, but it's almost impossible
custom editor is the way to do it
you can abuse their persistent listeners/events for it
yeah, so anything inspector related, they need to be able to be serialized... thus they've their own native wappers for it
Yeah, for struct using a PropertyDrawer that relies on SerializedObject would make more sense (it would make even more sense for people to stop trying to listen for changed made on a struct).
The rest is fine, I got most of the drawing/data update working, but struct are a PIA for some use cases haha
"It's nearly impossible/very complicated to do" is an OK answer. I needed argument to discuss it with my team
yeah, this is very very easy todo with custom editor..
doesn't matter what the types are
default PropertyDrawers ain't even good for general use cases
Well, the delegate type is incorrect
it might be correct for structs with the ref
but not for classes
but I would guess this is just not allowed
at least without boxing
you'll probably need to make them static
and take a ref explicitly