Relative Transform Replication - going forward from 4.24

In 4.24 the relative Location/Rotation/Scale3D properties of scene components have been marked as deprecated to warn users to convert to their Getters/Setters instead of directly referencing them as they will be going private in a future engine release.

I (and others I have talked to) have plugins/projects that turn off relative replication on components that move themselves and where I want total control over the replication (motion controllers for example) without turning it off for the entire component. With these going private DISABLE_REPLICATED_PROPERTY no longer is allowed to be used on them and I can’t specifically turn off any of these replicated properties on their own anymore. I also had a bReplicateMovement I added to some component classes that used DOREPLIFETIME_ACTIVE_OVERRIDE to take effect and this will no longer function either post 4.24.

This change effectively forces relative transform replication on any scene component that is replication enabled, without a way of working around it aside from direct source edits. I have many sub components with replicated properties where I do not want the positions of them to be replicated as well at times or at all.

I would suggest that SceneComponent’s get the same treatment as AActors and have a bReplicateMovement property added to them. This would allow for the privatization of the properties without closing off access to them entirely. It would also bring the positional replication more in line with the nominal workflow from AActors.

If this is not added, then I would respectfully ask that either the change be reverted, or some method of altering the replication of private properties be added to the engine as a whole (there are multiple other properties that as they go private will lock down some possibilities since they can no longer have their replication status altered by a replication macro).

Hello!

Don’t worry, these won’t just be “locked off” in future versions, and you’ll be able to disable them as you normally would.

For now, just wrap your calls to DOREPLIFETIME_ACTIVE_OVERRIDE, DOREPLIFETIME_CHANGE_CONDITION, DISABLE_REPLICATED_PROPERTY, and DISABLE_ALL_CLASS_REPLICATED_PROPERTIES in PRAGMA_DISABLE_DEPRECATION_WARNINGS and PRAGMDA_ENABLE_DEPRECATION_WARNINGS.

We will have changes coming in 4.25 that will allow you to make similar calls that won’t require access to the members directly, so even once they become private you’ll still be able to completely change this behavior.

I’m sorry for the inconvenience!

Thanks,
Jon N.

2 Likes

Thank you!

Was very worried, i’ll just suppress the warnings for now as you stated then.

"I (and others I have talked to) have plugins/projects that turn off relative replication on components that move themselves and where I want total control over the replication (motion controllers for example) "

I was curious where you did this, as we are using motioncontrollers and face issues related to replicated relative transforms. I would love to turn this off if you could show me where. Thanks!

In latest engine you would use the macro: DISABLE_REPLICATED_PRIVATE_PROPERTY in the GetLifetimeReplicatedProps function

They were true to their word and added a pathway for it.

I do still have to use a custom macro to change private replication conditions, but was able to do so pretty easily by referencing the above macro.

1 Like