Orbiting Body Rotations Are Choppy

Godot Version

v4.4.1.stable.official [49a5bc7b6]

Question

Absolute beginner here, trying to learn coding via Godot. Any help would be appreciated.

I’m having a remoteTransform3D node rotate a StaticBody3D while following a Path3D. Planet orbits star. When I run the project, my rotation comes out choppy. Am I missing a lerp, or using the function incorrectly?

extends Node3D

@export var rotation_speed_deg: float = 90.0
@export var speed: float = -0.09
@onready var the_planet: Node3D = $Node3DPlanetTemplate/StaticBody3D/CollisionShape3D
@onready var path_follow: PathFollow3D = $Node3DPlanetTemplate/Path3D/PathFollow3D


var distanceScale: float = ScaleManager.distanceScale
var timeScale: float = ScaleManager.timeScale
var bodyScale: float = ScaleManager.bodyScale

func _ready():
	# Get the radius from the global singleton dictionary
	var mercury_radius = 10
	
	# Create a circular curve and assign it to the Path3D
	set_path3d_circle($Node3DPlanetTemplate/Path3D, mercury_radius)

func set_path3d_circle(path: Path3D, radius: float, resolution: int = 32) -> void:
	var curve := Curve3D.new()
	for i in range(resolution + 1):
		var angle = TAU * float(i) / float(resolution)
		var x = radius * cos(angle)
		var z = radius * sin(angle)
		curve.add_point(Vector3(x, 0, z))
	curve.closed = true
	path.curve = curve


func _physics_process(delta: float) -> void:
	var rotation_speed_rad = deg_to_rad(rotation_speed_deg)
	the_planet.rotate_y(rotation_speed_rad * timeScale * delta)
	
	path_follow.progress_ratio += speed * timeScale * delta
	# Wrap around if progress_ratio exceeds 1.0
	if path_follow.progress_ratio > 1.0:
		path_follow.progress_ratio = 0.0


The solution was my curve resolution integer. By increasing from 32 to 128, the rotation looks much cleaner.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.