<aside>
đź’ˇ In CityBLD, a Road Module is a spline actor that can attach itself to the edge or centerline of any Dynamic Road. It can be used for sidewalks, highway barriers, or even snow piles along a road.
</aside>
In our previous tutorials, we’ve used ModernCity_MeshSidewalkModule, included in the Modern City Kit, as a base. Let’s go ahead and create an entirely new one.

Creating a new Road Module
- In our European Kit folder, let’s create a new BP with the parent class RoadModuleBP.

- We’ll call this RoadModule_EuropeanSidewalk.
- When we open it up, we’re greeted with an empty Road Module with some settings in the class defaults. These settings offer some basic mesh generation options, but we can also add custom logic to each Road Module as needed.
Adding Layers
- Let’s start by adding a Layer. Road Modules currently support 3 layer types, Dynamic Mesh(generates a fully procedural mesh), Static Meshes(creates a row of Static Meshes along the spline), and Modular Road(this works in the same way as CityBLD’s Modular Roads, creating spline meshes that can be overridden).

- You can see a “Layer Type” parameter in our newly created Layer. For this example, we’ll use a Dynamic Mesh Layer and leave that setting at the default.
- Let’s set the Module Name to “European Sidewalk A”, and the Layer Name to “Sidewalk Mesh”.
- Now we’ll need a Polyline Profile. This is the curve that will drive the generation of the procedural mesh. We’ll select the included curve asset called “Curve_SampleSidewalk” for now.
- We’ll also adjust the Polyline Scale parameter and bring it down to 50, because the curve is a bit larger by default than our real life reference..
<aside>
đź’ˇ One important thing to remember is to enable bGenerateMaximumEdge on our sidewalk layer - this will allow us to select the outer edge of the sidewalk later to generate Block Shapes!

</aside>
- Now we can add our second Layer. This will also be a Dynamic Mesh layer, we’ll call this layer Curb Mesh. We can use included sample assets for this one as well. I’ll use the “Curve_SampleCurb” here, and bring the Polyline Scale down to 30 to match our reference better.
