Hello!
I have an actor for chestbox - ABChestbox. It includes actorComponent UInventory* inventory. UInventory have TArray (UInventoryItem) items; UInventoryItem = child of UObject
All replication rules are checked, for this setup.
ABChestbox:
-
ABChestbox has bReplicated = true
-
ABChestbox → UInventory has UPROPERTY(Replicated)
-
ABChestBox has GetLifetimeReplicatedProps, with DOREPLIFETIME(ABChestBox, inventory);
-
ABChestBox has ReplicateSubobjects with
- bool repl = Super::ReplicateSubobjects(Channel, Bunch, RepFlags);
- repl |= Channel->ReplicateSubobject(inventory, *Bunch, *RepFlags);
UInventory:
-
In UInventory TArray items has GetLifetimeReplicatedProps + UPROPERTY(Replicated)
-
Also UInventory has ReplicateSubobject, with replication for each UInventoryItem
- repl |= Channel->ReplicateSubobject(item, *Bunch, *RepFlags);
UInventoryItem:
-
UInventoryItem has IsSupportedForNetworking() const override { return true; }
-
UInventoryItem created like this - NewObject (UInventoryItem) (GetOwner(), …) - so outer is good and always = ABChestbox (in this case)
-
UInventoryItem has GetLifetimeReplicatedProps with internal data + UPROPERTY(Replicated) for this data
I think i dont forgot something. So in this case if i try to get ABChestBox→UInventory →items. I see items not empty, but all slots are nullptr.
What im missing?