Hey guys! I have a class “CityBuildings”, which is basically just a mesh of some buildings. Now, I have multiple meshes that I would like to display randomly. I spawn a 10x10 array of CityBuildings and don’t want to look every instance the same. So, is there a way to randomly pick between multiple meshes when the object is spawned? I thought I could just use a rand() function in the constuctor, but then all instances get the same mesh (the one, which was selected during the first constructor call).
Then I thought about don’t using a CityBuildings class at all, since it doesn’t have any parameters except the mesh/components. But I also failed to add mesh components procedurally at runtime. The Buildings should be added to a city class. I load the staticMeshes in the constructor of the city-class and then at runtime try to spawn a UStaticMeshComponent and set this meshes as the corresponging static meshes. But I either don’t see anything (nothing appears), or the code crashes in the RegisterComponent function…
for (int i = 0; i < gridWidth; i++){
for (int j = 0; j < gridHeight; j++){
if (buildingGrid->cells*[j].isBuildable == true){
UStaticMesh* randMesh = NULL;
int randMeshIndex = rand() % 3;
if (randMeshIndex == 0) randMesh = habitations2;
if (randMeshIndex == 1) randMesh = habitations3;
if (randMeshIndex == 2) randMesh = habitations4;
if (randMeshIndex == 3) randMesh = habitations1;
UStaticMeshComponent* comp = NewObject<UStaticMeshComponent >();
comp->SetStaticMesh(randMesh);
int rot = rand() % 360;
comp->AddLocalRotation(FRotator(0, rot, 0));
comp->SetWorldScale3D(FVector(25, 25, 25));
buildingGrid->cells*[j].setAndOrientateBuilding(comp);
UStaticUtilityFunctions::SetupSMComponentsWithCollision(comp);
comp->RegisterComponentWithWorld(GetWorld());
// comp->RegisterComponent();
comp->AttachTo(RootComponent);
comp->SetVisibility(true);
AddOwnedComponent(comp);
RegisterAllComponents();
}
}
}