The UPROPERTY Macro exposes the variable to Unreal Engines Reflection system through the Unreal Build Tool and Unreal Header Tool. The same with other macros such as UFUNCTION, USTRUCT, UCLASS etc. Without using these macros, you cannot use the variable/function/class etc in the editor, as the editor doesn’t recognize them.
Adding UPROPERTY() to a variable will expose that variable to the Reflection System, and the editor will be able to recognise it. You won’t however, be able to edit it in the editor. This is where **specifiers **and **meta data specifiers **come in.
Here is a link to a blog post from the Unreal Engine team in regards to the reflection system. https://www.unrealengine.com/en-US/b…tem-reflection
Here is a link to the documentation on UPROPERTIES. They can do some amazing things. https://docs.unrealengine.com/en-US/…ies/index.html
These exposure macros are not to be confused with the Unreal Engine VM script classes such as FProperty, FFunction, FStrProperty etc.formally U, now F.
Using Unreal Engines Smart Pointer/Reference libraries ensures that the variables wrapped in a smart library, TSharedPtr for example, are automatically Garbage Collected when there are no more references to that variable. Not using the Smart Libraries with pointers for example, means you have to manually Garbage Collect your pointer variable.
I don’t think you can. Without the UPROPERTY macro, the Unreal Engine Build Tool won’t add the component to the reflection system, thus won’t be exposed in the editor.