Remove redundancies in similar properties
You could make your code less redundant through the use of a custom SourceGenerator. It could work kinda like Fody works for WPF and INotifyPropertyChanged.
Sadly I have no example to provide for the SourceGenerator's implementation because I haven't had time to toy with them yet. Though the idea is to make your SourceGenerator generate the redundant code for you at compile time whenever it detects something that you want to be autogenerated.
You have two options but both are gonna require custom attribute(s) :

Make it work like a white-list : don't autogenerate by default, autogenerate only when property is tagged with your attribute. Your property (or field) would then be reduced to
[MyAutoGenerationAttribute]
public object MyProperty { get; set; }


Make it work like a black-list (like Fody does) : always autogenerate by default, don't autogenerate when property is tagged with your attribute.


I'm not really familiar with Unity but my only concern is that this solution may not be compatible with Unity's shenanigans, especially since SourceGenerators is a fairly new feature.
PS : If optimization matters I recommend you edit your setters so that the event gets raised only when the value of the property changes for real (ex: by wrapping the setter with something like if (myBackingField != value))