Godot Version
3.5.3
Question
I created a script that generates a one-way road, but the road only has a forward direction. Does anyone have any ideas on how to add random curvature to the road (sharp turns, etc.)?
P.S. I was inspired by the generation of terrain and roads from the game The Long Drive and decided to repeat similar on Godot Engine.
Here’s the code:
extends Spatial
# Road settings
export var segmentLength = 20.0 # Segment lenght
export var segmentWidth = 8.0 # Segment width
export var roadMaterial = preload("res://road.res") # Road material
export var numSegments = 10 # Startup segments count
var segments = [] # Segments list (array)
func _ready():
# Generate startup segments
for i in range(numSegments):
generateSegment()
func generateSegment():
var segment = MeshInstance.new()
var mesh = PlaneMesh.new()
mesh.size = Vector2(segmentLength, segmentWidth)
segment.mesh = mesh
segment.create_trimesh_collision()
segment.transform = Transform(Basis(), Vector3(segments.size() * segmentLength, 0, 0))
if roadMaterial:
segment.material_override = roadMaterial
add_child(segment)
segments.append(segment)
func _process(delta):
var player = get_tree().get_root().find_node("actor", true ,false)
var playerPos = player.global_transform.origin.x / 0.5
var lastSegmentPos = segments[segments.size() - 1].global_transform.origin.x
if playerPos > lastSegmentPos - segmentLength * 2.0:
generateSegment()
Here’s a screenshot:



