GetLifetimeReplicatedProps calls only once on subobject
I used the subobject replication on Character child class. The replication code in subobject:
But this code runs only once. Consequently Health property is not replicated when it changes.
Code in class that replicates this subobject:
Subobject has this :
You're attempting to manually replicate a subclass of UActorComponent. It will misbehave. You have two choices:
A. Derive from UObject for your subobject and replicate manually (implementing IsSupportedForNetworking on the subobject, implementing ReplicateSubobjects on the Actor, etc. as you've mostly done, but see notes below)
B. Derive from UActorComponent for your subobject. Then simply set it as bReplicates, and make sure you've registered the component (which adds it to the Components list for your Actor). UE4 will handle all other stuff for replication.
Note: for replication for work properly on your UObject-derive subobject, you also need to implement GetWorld, GetFunctionCallspace, and CallRemoteFunction.
There are also a couple of other mistakes in your code. You've implemented ReplicateSubobjects on your UIndicatorsComponent, but assuming you were replicating it manually, it would never be called. Your outer ASADCharacter must call it from within its own ReplicateSubobjects.
One more additional note: if you're able to create your UIndicatorsComponent using CreateDefaultSubobject in your initializer, that would be good. Then your component will have a stable name relative to its outer, which means the server and client will have to exchange less data (the client will not have to receive instructions to create the subobject from the server). If the subobject is removed, the server will still correctly tell the client to remove it.
Follow this question
Once you sign in you will be able to subscribe for any updates here