I’m trying to create a series of cylinders programmatically when an actor begins play. I’m trying to do this using this method:
UCylinderBuilder builder = UCylinderBuilder();
builder.BuildCylinder(0, false, 6, 100, 10);
But I get the compiler error: UCylinderBuilder()
is a private constructor.
What’s the right way to create a cylinder mesh instance at runtime?
Here is some pseudo-c++ to get you started
StaticMeshComponent = ConstructObject<UStaticMeshComponent>(**COMPONENT CLASS GOES_HERE** (in your case, a cylinder mesh that you are going to import from a modelling program), GetOwner(), NAME_None, RF_Transient);
// Add to map of components.
StaticMeshComponents.Add(StaticMesh, StaticMeshComponent);
StaticMeshComponent->AttachTo(this, NAME_None, EAttachLocation::KeepRelativeOffset);
StaticMeshComponent->SetStaticMesh(StaticMesh);
StaticMeshComponent->SetVisibility(true);
StaticMeshComponent->RegisterComponent();
You basically use the constructor object initializer to fabricate a new StaticMeshComponent with desired name, owner , based on a static mesh class (you need to import a cylinder fbx file - BSP brushes are a different thingm they get generated from code), then register the component and make it visible.
This is a more advanced way, in which you need to add a crazy amount of calculations just for the vertices. It should be used in stuff like terrain generation and wave simulation