Unity-Technologies / com.unity.netcode.gameobjects

Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.
MIT License
2.15k stars 435 forks source link

Calling SetParent causes NetworkObject to have an incorrect position on clients. #2959

Open qjonathan opened 5 months ago

qjonathan commented 5 months ago

Description

With interpolation enabled when the server changes the parent of a NetworkObject the position on the clients is wrong for 1 frame.

Reproduce Steps

With interpolation enabled on the NetworkTransform

  1. Player A goes next to NetworkObject,
  2. The server attach the networkobject to Player A by calling SetParent,
  3. On the Client(Player B) the NetworkObject position is now wrong.

Expected Outcome

We did not have that issue when using 1.2.0, we just updated to 1.9.1 and one of the gameplay mechanics suddenly started acting weird. Disabling interpolation seems to fix the issue but will cause the visuals to be less smooth

Environment

NoelStephensUnity commented 4 months ago

@qjonathan Could you provide a replication of this issue and/or provide the code snippet(s) that handles the parenting? It might be that you want to not keep the world position (i.e. WorldPositionStays = false) and switch the child over to local space when parenting....but a working replication project would help me better understand your issue.