feat: added BT debug labels to enemies

This commit is contained in:
Sara Gerretsen 2026-03-18 16:31:51 +01:00
parent 5eab3fdae9
commit 7108d8c3a6
10 changed files with 120 additions and 41 deletions

View file

@ -1,11 +1,14 @@
#include "behaviour_tree.h"
#include "behaviour_nodes/behaviour_composite.h"
#include "behaviour_nodes/behaviour_node.h"
#include "behaviour_nodes/control_nodes.h"
#include "core/config/engine.h"
#include "core/object/class_db.h"
#include "core/object/object.h"
#include "core/variant/typed_array.h"
void BehaviourTree::_bind_methods() {}
void BehaviourTree::_bind_methods() {
ADD_SIGNAL(MethodInfo("current_behaviour_changed", PropertyInfo(Variant::OBJECT, "new_behaviour", PROPERTY_HINT_NODE_TYPE, "BehaviourNode")));
}
void BehaviourTree::process() {
do {
@ -47,6 +50,7 @@ bool BehaviourTree::execute_next() {
}
if (this->current->get_parent() != next) {
next->enter();
emit_signal("current_behaviour_changed", next);
}
this->current = next;
return this->current != this->root && (cast_to<BehaviourComposite>(this->current) || this->current->get_status() != BehaviourNode::Running);

Binary file not shown.

Binary file not shown.

View file

@ -3,19 +3,20 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c2uvr1d00euop"
path="res://.godot/imported/texture_01.png-065870243ec51bcadb3ca8607066027c.ctex"
path.s3tc="res://.godot/imported/texture_01.png-065870243ec51bcadb3ca8607066027c.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://assets/prototype_textures/Red/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-065870243ec51bcadb3ca8607066027c.ctex"]
dest_files=["res://.godot/imported/texture_01.png-065870243ec51bcadb3ca8607066027c.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -37,4 +38,4 @@ process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
detect_3d/compress_to=0

View file

@ -17,7 +17,7 @@ script = ExtResource("2_5438c")
[node name="BehaviourSequence" type="BehaviourSequence" parent="BehaviourAlwaysSuccess" unique_id=545263859]
[node name="MoveToTarget" type="BehaviourAction" parent="BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1081201512]
[node name="MoveToItem" type="BehaviourAction" parent="BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1081201512]
script = ExtResource("3_5438c")
[node name="PickupItem" type="BehaviourAction" parent="BehaviourAlwaysSuccess/BehaviourSequence" unique_id=2083134526]

View file

@ -53,26 +53,26 @@ script = SubResource("GDScript_xqvpn")
wait_time = 0.1
one_shot = true
[node name="CombatSequence" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector" unique_id=611769881]
[node name="SequenceCombat" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector" unique_id=611769881]
[node name="SelectTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence" unique_id=56930655]
[node name="SelectTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat" unique_id=56930655]
script = ExtResource("2_1p4o0")
[node name="SelectorCombat" type="BehaviourSelector" parent="BehaviourRepeater/BehaviourSelector/CombatSequence" unique_id=460186240]
[node name="SelectorCombat" type="BehaviourSelector" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat" unique_id=460186240]
[node name="SequenceFindWeapon" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat" unique_id=1379140695 instance=ExtResource("4_d53py")]
[node name="SequenceFindWeapon" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat" unique_id=1379140695 instance=ExtResource("4_d53py")]
[node name="AlwaysSuccessAttack" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat" unique_id=1246764318]
[node name="AlwaysSuccessAttack" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat" unique_id=1246764318]
[node name="SequenceAttack" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack" unique_id=560445563]
[node name="SequenceAttack" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat/AlwaysSuccessAttack" unique_id=560445563]
[node name="SelectTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=1912259269]
[node name="SelectEnemy" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=1912259269]
script = ExtResource("2_1p4o0")
[node name="ApproachTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=2073752420]
[node name="ApproachEnemy" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=2073752420]
script = ExtResource("7_tx7q7")
[node name="SelectorAttackAnimation" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=465551260 instance=ExtResource("7_bmb0k")]
[node name="SelectorAttackAnimation" parent="BehaviourRepeater/BehaviourSelector/SequenceCombat/SelectorCombat/AlwaysSuccessAttack/SequenceAttack" unique_id=465551260 instance=ExtResource("7_bmb0k")]
[node name="PatrolSequence" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector" unique_id=92762658]
@ -81,7 +81,7 @@ script = ExtResource("3_1fc8h")
[node name="BehaviourAlwaysSuccess" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/PatrolSequence" unique_id=262177741]
[node name="ApproachTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/PatrolSequence/BehaviourAlwaysSuccess" unique_id=1164066260]
[node name="ApproachPatrolTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/PatrolSequence/BehaviourAlwaysSuccess" unique_id=1164066260]
script = ExtResource("7_tx7q7")
[node name="Idle" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector" unique_id=2051783162]

View file

@ -63,19 +63,50 @@ size = Vector3(0.33496094, 0.5253906, 0.26367188)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_882u1"]
radius = 0.2133789
[sub_resource type="GDScript" id="GDScript_3hb37"]
resource_name = "DebugLabel"
script/source = "extends Label3D
var new_text : String = \"\"
func _behaviour_changed(behaviour : BehaviourNode):
if not new_text.is_empty():
new_text += \"\\n\"
for i in $\"../BehaviourTree\".get_path_to(behaviour).get_name_count() - 2:
new_text += \"| \"
new_text += \"- > \"
new_text += behaviour.get_name()
if behaviour is BehaviourAction:
match behaviour.get_status():
BehaviourNode.Fail:
new_text += \" (FAIL)\"
BehaviourNode.Success:
new_text += \" (SUCCESS)\"
BehaviourNode.Running:
new_text += \" (RUNNING)\"
func _ready():
$\"../BehaviourTree\".current_behaviour_changed.connect(_behaviour_changed)
func _process(_delta):
if not new_text.is_empty():
text = new_text
new_text = \"\"
"
[sub_resource type="CylinderShape3D" id="CylinderShape3D_we7g8"]
height = 3.3642578
radius = 9.955078
[node name="bot" unique_id=1620071502 groups=["EnemyHitbox"] instance=ExtResource("1_882u1")]
[node name="bot" unique_id=1098018666 groups=["EnemyHitbox"] instance=ExtResource("1_882u1")]
collision_layer = 2
collision_mask = 3
script = SubResource("GDScript_882u1")
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="0" unique_id=979271948]
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1205224726) index="0" unique_id=1628401802]
material_override = SubResource("StandardMaterial3D_41oev")
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="1" unique_id=957498611]
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1205224726) index="1" unique_id=957498611]
transform = Transform3D(0.015967373, -0.083946444, 0.9963424, -0.17989334, -0.98045003, -0.07972447, 0.9835564, -0.17796235, -0.030756809, 0.27221423, 0.7951686, 0.024477992)
bone_name = "hand.r"
bone_idx = 10
@ -100,7 +131,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.7755576e-16, 0.10578142, 2
script = ExtResource("3_3hb37")
damage_group = "PlayerHitbox"
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="2" unique_id=1761081841]
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1205224726) index="2" unique_id=1761081841]
transform = Transform3D(-0.039434362, 0.07924447, -0.9960749, 0.12679999, -0.9883944, -0.083653376, -0.99114394, -0.12960118, 0.028928574, -0.2710728, 0.7714727, 0.0945672)
bone_name = "hand.l"
bone_idx = 7
@ -119,7 +150,7 @@ transform = Transform3D(1.0000169, -1.5795231e-06, -3.874302e-07, 8.046627e-07,
shape = SubResource("BoxShape3D_we7g8")
debug_color = Color(0.9966913, 0, 0.17880186, 1)
[node name="AnimationPlayer" parent="." index="1" unique_id=741852883]
[node name="AnimationPlayer" parent="." index="1" unique_id=413547776]
unique_name_in_owner = true
root_motion_track = NodePath("Character/Skeleton3D:root")
@ -127,15 +158,29 @@ root_motion_track = NodePath("Character/Skeleton3D:root")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_882u1")
[node name="BehaviourTree" parent="." index="3" unique_id=82050956 instance=ExtResource("3_we7g8")]
[node name="Label3D" type="Label3D" parent="." index="3" unique_id=1185308080]
process_mode = 3
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2257917, 0)
pixel_size = 0.0005
billboard = 1
fixed_size = true
render_priority = 10
text = "SOMETHING WENT WRONG!!!"
horizontal_alignment = 0
vertical_alignment = 2
autowrap_trim_flags = 0
justification_flags = 0
script = SubResource("GDScript_3hb37")
[node name="AwarenessArea" parent="." index="4" unique_id=986494999 instance=ExtResource("4_we7g8")]
[node name="BehaviourTree" parent="." index="4" unique_id=82050956 instance=ExtResource("3_we7g8")]
[node name="AwarenessArea" parent="." index="5" unique_id=986494999 instance=ExtResource("4_we7g8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0324535, 0)
[node name="CollisionShape3D" parent="AwarenessArea" index="0" unique_id=2035583636]
shape = SubResource("CylinderShape3D_we7g8")
[node name="ItemAwareness" parent="." index="5" unique_id=697341779 instance=ExtResource("4_we7g8")]
[node name="ItemAwareness" parent="." index="6" unique_id=697341779 instance=ExtResource("4_we7g8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0324535, 0)
collision_mask = 1
target_group = "WeaponPickup"

View file

@ -132,7 +132,7 @@ size = Vector3(0.33496094, 0.8294678, 0.4711914)
height = 1.8466797
radius = 0.89404297
[node name="bot" unique_id=1620071502 groups=["PlayerHitbox"] instance=ExtResource("1_eqqp1")]
[node name="bot" unique_id=1195498535 groups=["PlayerHitbox"] instance=ExtResource("1_eqqp1")]
collision_layer = 2
collision_mask = 3
script = SubResource("GDScript_eqqp1")
@ -162,10 +162,10 @@ transform = Transform3D(0.981895, -5.3638707e-09, -0.18942553, 5.529141e-09, 1,
current = true
fov = 52.5
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="0" unique_id=979271948]
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(551696444) index="0" unique_id=625937078]
material_override = SubResource("StandardMaterial3D_f46kd")
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="1" unique_id=385862689]
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(551696444) index="1" unique_id=385862689]
transform = Transform3D(0.015967373, -0.083946444, 0.9963424, -0.17989334, -0.98045003, -0.07972447, 0.9835564, -0.17796235, -0.030756809, 0.27221423, 0.7951686, 0.024477992)
bone_name = "hand.r"
bone_idx = 10
@ -190,7 +190,7 @@ script = ExtResource("5_f46kd")
damage_group = "EnemyHitbox"
deal_damage = true
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="2" unique_id=279793409]
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(551696444) index="2" unique_id=279793409]
transform = Transform3D(-0.039434362, 0.07924447, -0.9960749, 0.12679999, -0.9883944, -0.083653376, -0.99114394, -0.12960118, 0.028928574, -0.2710728, 0.7714727, 0.0945672)
bone_name = "hand.l"
bone_idx = 7
@ -208,7 +208,7 @@ transform = Transform3D(1.0000169, -1.5944242e-06, -4.04194e-07, 6.556511e-07, 1
shape = SubResource("BoxShape3D_uxov2")
debug_color = Color(0.9966913, 0, 0.17880186, 1)
[node name="LegR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(2131828200) index="3" unique_id=2088257762]
[node name="LegR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(551696444) index="3" unique_id=2088257762]
transform = Transform3D(0.9947343, 0.10095803, 0.017639676, 0.10222586, -0.98967797, -0.1004331, 0.0073180734, 0.1017075, -0.9947873, 0.14436838, 0.42896914, -0.076926425)
bone_name = "leg.lower.r"
bone_idx = 14
@ -226,7 +226,7 @@ transform = Transform3D(1, -5.960372e-07, -1.0579633e-06, 5.960361e-07, 1, -1.03
shape = SubResource("BoxShape3D_nmc1l")
debug_color = Color(0.9966913, 0, 0.17880186, 1)
[node name="AnimationPlayer" parent="." index="5" unique_id=741852883]
[node name="AnimationPlayer" parent="." index="5" unique_id=473246272]
unique_name_in_owner = true
root_motion_track = NodePath("Character/Skeleton3D:root")

View file

@ -2,6 +2,7 @@
[ext_resource type="Texture2D" uid="uid://cpsvnjmw5300a" path="res://assets/prototype_textures/Green/texture_01.png" id="1_7y55x"]
[ext_resource type="PackedScene" uid="uid://d0yivm54mjib2" path="res://objects/player.tscn" id="1_upt1h"]
[ext_resource type="Texture2D" uid="uid://c2uvr1d00euop" path="res://assets/prototype_textures/Red/texture_01.png" id="2_75bvq"]
[ext_resource type="Texture2D" uid="uid://cx3fxgh11s4vh" path="res://assets/prototype_textures/Orange/texture_01.png" id="2_hyc8p"]
[ext_resource type="PackedScene" uid="uid://1s2obm2l4f1a" path="res://objects/enemy.tscn" id="2_w0s2s"]
[ext_resource type="PackedScene" uid="uid://djv4uhdtykukm" path="res://objects/arming_sword.tscn" id="5_hyc8p"]
@ -25,6 +26,10 @@ albedo_texture = ExtResource("1_7y55x")
albedo_texture = ExtResource("1_7y55x")
uv1_triplanar = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bg1mu"]
albedo_texture = ExtResource("2_75bvq")
uv1_triplanar = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cryqq"]
albedo_texture = ExtResource("2_hyc8p")
uv1_triplanar = true
@ -36,7 +41,7 @@ uv1_triplanar = true
[sub_resource type="PrismMesh" id="PrismMesh_hyc8p"]
material = SubResource("StandardMaterial3D_hyc8p")
left_to_right = 0.0
size = Vector3(5.374, 2.99, 2.75)
size = Vector3(6.784, 2.99, 6.1)
[node name="GameWorld" type="Node3D" unique_id=306009803]
@ -44,7 +49,7 @@ size = Vector3(5.374, 2.99, 2.75)
environment = SubResource("Environment_4r7d4")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=169512636]
transform = Transform3D(-0.99730414, 0.0635488, -0.03668976, 4.8204853e-08, 0.50000006, 0.86602545, 0.07337971, 0.8636907, -0.49865213, 0, 0, 0)
transform = Transform3D(0.8744706, 0.42009044, -0.24253945, 4.1992894e-08, 0.5000002, 0.86602545, 0.4850787, -0.7573137, 0.4372353, 0, 0, 0)
shadow_enabled = true
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=1773598072]
@ -56,23 +61,47 @@ material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(36.41382, 0.25, 50)
material = SubResource("StandardMaterial3D_b3nq0")
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D" unique_id=540635528]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.670563, 3.0843391, 4.233795)
material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(0.35809326, 6.16, 50)
material = SubResource("StandardMaterial3D_bg1mu")
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D" unique_id=619575778]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.54325104, 3.0843391, -20.536194)
material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(36.612717, 6.16, 0.46002197)
material = SubResource("StandardMaterial3D_bg1mu")
[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D" unique_id=980540481]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.54325104, 3.0843391, 29.023724)
material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(36.612717, 6.16, 0.3809204)
material = SubResource("StandardMaterial3D_bg1mu")
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1348919751]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.639027, 3.0843391, 4.233795)
material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(0.35809326, 6.16, 50)
material = SubResource("StandardMaterial3D_bg1mu")
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1468524701]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3704069, -16.194504)
size = Vector3(11.69043, 3.234253, 9.1625595)
material = SubResource("StandardMaterial3D_cryqq")
[node name="CSGMesh3D" type="CSGMesh3D" parent="CSGCombiner3D" unique_id=1390383840]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.530771, 1.4929096, -16.254684)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.223477, 1.4929096, -14.654582)
mesh = SubResource("PrismMesh_hyc8p")
[node name="CSGMesh3D2" type="CSGMesh3D" parent="CSGCombiner3D" unique_id=1881924213]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -8.5306, 1.4917104, -16.338177)
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -9.232916, 1.4917104, -14.66638)
mesh = SubResource("PrismMesh_hyc8p")
[node name="bot" parent="." unique_id=1395504510 instance=ExtResource("1_upt1h")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.81944275, 2.9908073, -16.53226)
[node name="bot" parent="." unique_id=1195498535 instance=ExtResource("1_upt1h")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 2.991, -17.607033)
[node name="bot7" parent="." unique_id=161717875 node_paths=PackedStringArray("path") instance=ExtResource("2_w0s2s")]
[node name="bot7" parent="." unique_id=1620071502 node_paths=PackedStringArray("path") instance=ExtResource("2_w0s2s")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -9.093315, 0, 1.792202)
path = [NodePath("../Marker3D"), NodePath("../Marker3D2"), NodePath("../Marker3D3"), NodePath("../Marker3D4")]
@ -91,7 +120,7 @@ transform = Transform3D(-0.9973041, 0.063548714, -0.036689803, 5.1930144e-08, 0.
[node name="Marker3D4" type="Marker3D" parent="." unique_id=1864554328]
transform = Transform3D(-0.9973041, 0.063548714, -0.036689803, 5.1930144e-08, 0.5000001, 0.86602545, 0.073379725, 0.86369073, -0.4986521, -7.3572216, 0, -6.262743)
[node name="bot3" parent="." unique_id=186148752 node_paths=PackedStringArray("path") instance=ExtResource("2_w0s2s")]
[node name="bot3" parent="." unique_id=1894010791 node_paths=PackedStringArray("path") instance=ExtResource("2_w0s2s")]
transform = Transform3D(0.3496833, 0, -0.93686795, 0, 1, 0, 0.93686795, 0, 0.3496833, -0.5668974, 0, 16.554804)
path = [NodePath("../Marker3D5"), NodePath("../Marker3D6"), NodePath("../Marker3D7"), NodePath("../Marker3D8")]