Physical 3D rope based on PinJoint3D that interacts with RigidBody3D
Via asset library
- Instantiate child scene. Adding child node will not work because Rope3D scene has children
- click Rope3D
- Select start point, end point, adjust other values
- Reference the
Rope3Dnode in code, callrope.make()when you need it
const RopeScene: PackedScene = preload("res://addons/rope3d/Rope3D.tscn")
@onready var start_point = $RigidBody/Node3D
@onready var end_point = $AnotherRigidBody/AnotherNode3D
func _ready():
var rope = RopeScene.instantiate()
rope.start_point = start_point
rope.end_point = end_point
rope.rope_length = 6.0
rope.radius = 0.1
rope.resolution = 6.0 # number of pinjoints
# adjust pin joint attributes
rope.bias = 0.3
rope.damping = 1.0
rope.impulse_clamp = 0.01
var ok = rope.can_make()
if ok:
add_child(rope)
rope.make()Due to dynamic generating, there are many situations that rope.make() can raise errors
- The
rope_lengthis shorter then distance between twoNode3Ds resolutioncannot be less then one- The size of segment is longer than the rope
- Two global positions of
Node3Dand the turning point position cannot constitude to a triangle, as shown in the figure below
If you want to make gameplays that allows player to create rope on the fly, make sure to check the boolean result of rope.make() or rope.can_make()
If you do not need physics, you can simply instantiate a RopeMesh and operate the curve points of the child Path3D
RopeMesh is an ImmediateMesh that draws a 3d rope from Path3D
verlet rope C#, ImmediateMesh rope with particle verlet integration simulation, is highly recommended if you don't need RigidBody3D interaction and use C# for your project.

