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
Rope3D
node 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.resolution = 6.0 # number of pinjoints
rope.radius = 0.1
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_length
is shorter then distance between twoNode3D
s resolution
cannot be less then one- The size of segment is longer than the rope
- Two global positions of
Node3D
and 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.