I’m creating a game where the levels are randomly generated. I’ve been doing tests as follows:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Generated Mesh", ReplicatedUsing = OnRep_SetGeneratedMeshData)
FGeneratedMeshData MeshData;
(The “EditAnywhere” and “BlueprintReadWrite” flags are only used for viewing data while in game.)
GeneratedMeshData.h
USTRUCT()
struct ALPHA_API FGeneratedMeshData
{
GENERATED_USTRUCT_BODY()
public:
FGeneratedMeshData();
~FGeneratedMeshData();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Generated Mesh")
FSimpleMeshData SceneProxyMeshData;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Generated Mesh")
TArray<FVector2D> SceneProxyUVData;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Generated Mesh")
FSimpleMeshData PhysicsMeshData;
};
SimpleMeshData.h
USTRUCT()
struct ALPHA_API FSimpleMeshData
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere, Category = "Generated Mesh")
TArray<int32> Indices;
UPROPERTY(EditAnywhere, Category = "Generated Mesh")
TArray<FVector> Vertices;
void AddVertice(FVector vertice);
void AddTriangle(FTriangle triangle);
int32 IndiceCount() const;
int32 VerticeCount() const;
int32 TriangleCount() const;
FTriangle GetTriangleByIndex(int32 index);
FBoxSphereBounds CalcCurrentBounds() const;
};
This seems to work rather well until my mesh data reaches around 1MB. The MeshData is only set once the mesh is complete. i.e.
DoMeshGeneration()
{
FGeneratedMeshData md;
[MeshGenerationStuff]
this->MeshData = md;
}
If my replicated data is >~1MB, it crashes. My output log reads:
"Assertion failed: WriterState.CurrentChanged - OldChangedIndex == ArrayChangedCount [File:D:\BuildFarm\buildmachine_++depot+UE4-Releases+4.6\Engine\Source\Runtime\Engine\Private\RepLayout.cpp] [Line: 977]"
I can’t find anything online as far as replicating large amounts of data is concerned. Any help is very much appreciated!