Use look-at modifiers
This commit is contained in:
parent
35cfad6358
commit
38743e850a
Binary file not shown.
Binary file not shown.
@ -16,7 +16,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8724979, -0.2644562)
|
||||
current = true
|
||||
|
||||
[node name="soldier_m" parent="." unique_id=281995630 instance=ExtResource("1_jd651")]
|
||||
transform = Transform3D(-0.5, 0, -4.371139e-08, 0, 0.5, 0, 4.371139e-08, 0, -0.5, 0, 0, 0)
|
||||
transform = Transform3D(-0.5, 0, -4.371139e-08, 0, 0.5, 0, 4.371139e-08, 0, -0.5, 0, 0, -1.1592964)
|
||||
visible = false
|
||||
|
||||
[node name="collision_shape_3d2" type="CollisionShape3D" parent="." unique_id=442150782]
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cw7duhhjebypt" path="res://scenes/player/raygun.tscn" id="1_a50o4"]
|
||||
[ext_resource type="PackedScene" uid="uid://ncxcmgdit2j1" path="res://mesh/soldier_m.tscn" id="1_sxefq"]
|
||||
[ext_resource type="PackedScene" uid="uid://cg81784ct8gf5" path="res://mesh/raygun.tscn" id="3_jbny0"]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a50o4"]
|
||||
animation = &"Soldier|StrafeLeft"
|
||||
@ -43,22 +44,22 @@ nodes/Movement/node = SubResource("AnimationNodeBlendSpace2D_tt88r")
|
||||
nodes/Movement/position = Vector2(350, 90)
|
||||
node_connections = [&"output", 0, &"Movement"]
|
||||
|
||||
[node name="soldier_m" type="SoldierMesh" unique_id=281995630 node_paths=PackedStringArray("hand_attachment", "animation_tree", "skeleton", "skeleton_modifier")]
|
||||
[node name="soldier_m" type="SoldierMesh" unique_id=281995630 node_paths=PackedStringArray("hand_attachment", "animation_tree", "skeleton", "look_at")]
|
||||
hand_attachment = NodePath("bone_attachment_3d/hand")
|
||||
animation_tree = NodePath("animation_tree")
|
||||
skeleton = NodePath("SoldierM/Soldier/Skeleton3D")
|
||||
raygun = ExtResource("1_a50o4")
|
||||
skeleton_modifier = NodePath("SoldierM/Soldier/Skeleton3D/soldier_skeleton_modifier")
|
||||
look_at = NodePath("look_at_root")
|
||||
|
||||
[node name="SoldierM" parent="." unique_id=1868587353 instance=ExtResource("1_sxefq")]
|
||||
|
||||
[node name="Skeleton3D" parent="SoldierM/Soldier" parent_id_path=PackedInt32Array(1868587353, 803584260) index="0" unique_id=1574145981]
|
||||
bones/0/position = Vector3(0, 0, 0.00071418716)
|
||||
bones/1/position = Vector3(0, 0, -0.007)
|
||||
bones/1/rotation = Quaternion(0.7044769, 0, 0, 0.709727)
|
||||
bones/1/rotation = Quaternion(0.70569277, 0, 0, 0.7085179)
|
||||
bones/1/scale = Vector3(1, 1, 1)
|
||||
bones/2/position = Vector3(0.002, 3.469447e-18, -1.4901118e-10)
|
||||
bones/2/rotation = Quaternion(0.9504327, 2.1033886e-08, 2.357445e-08, -0.31093037)
|
||||
bones/2/rotation = Quaternion(0.9509405, 2.0995262e-08, 2.3608855e-08, -0.30937394)
|
||||
bones/2/scale = Vector3(1, 1, 1)
|
||||
bones/3/position = Vector3(0, 0.0069999984, 5.169879e-25)
|
||||
bones/3/scale = Vector3(1, 0.99999994, 1)
|
||||
@ -66,7 +67,7 @@ bones/4/position = Vector3(-2.39752e-11, 0.010049875, -1.4156722e-10)
|
||||
bones/4/rotation = Quaternion(0.73982674, -2.6881349e-08, 7.0005948e-09, 0.67279744)
|
||||
bones/4/scale = Vector3(1, 0.99999994, 0.99999994)
|
||||
bones/6/position = Vector3(-0.002, 3.469447e-18, -1.4901205e-10)
|
||||
bones/6/rotation = Quaternion(0.9992136, 1.7910667e-08, 1.8908183e-08, 0.039652776)
|
||||
bones/6/rotation = Quaternion(0.99916035, 1.7885682e-08, 1.893182e-08, 0.04097233)
|
||||
bones/6/scale = Vector3(1, 1, 1)
|
||||
bones/7/position = Vector3(0, 0.0069999984, -5.169879e-25)
|
||||
bones/7/rotation = Quaternion(-0.21973656, 4.264305e-08, 9.604991e-09, 0.9755593)
|
||||
@ -75,33 +76,33 @@ bones/8/position = Vector3(-2.3975525e-11, 0.010049875, -4.6138777e-11)
|
||||
bones/8/rotation = Quaternion(0.86758894, -7.867721e-09, 3.036851e-08, 0.4972821)
|
||||
bones/8/scale = Vector3(1, 0.99999994, 0.99999994)
|
||||
bones/10/position = Vector3(0, 0.009, 0)
|
||||
bones/10/rotation = Quaternion(-0.16860254, -0.13138649, 0.021690987, 0.9766475)
|
||||
bones/10/rotation = Quaternion(-0.1704422, -0.13139531, 0.021929594, 0.9763216)
|
||||
bones/10/scale = Vector3(1, 1, 1)
|
||||
bones/11/position = Vector3(6.8186457e-17, 0.008, 0.001)
|
||||
bones/11/rotation = Quaternion(0.011738047, 2.356739e-05, -0.003212238, 0.999926)
|
||||
bones/11/rotation = Quaternion(0.005668696, 1.1375248e-05, -0.0015512996, 0.9999828)
|
||||
bones/11/scale = Vector3(1, 1, 1)
|
||||
bones/12/position = Vector3(-2.2285185e-16, 0.0035, 0.0015000002)
|
||||
bones/12/rotation = Quaternion(-0.70710677, 0, 0, 0.70710677)
|
||||
bones/12/scale = Vector3(1, 1, 1)
|
||||
bones/14/position = Vector3(0.005, 0.005, -1.7336413e-21)
|
||||
bones/14/rotation = Quaternion(0.8844465, 0.032357745, 0.43648675, -0.16182332)
|
||||
bones/14/rotation = Quaternion(0.88285106, 0.032361757, 0.43712845, -0.16865772)
|
||||
bones/14/scale = Vector3(1, 0.99999994, 1)
|
||||
bones/15/position = Vector3(-1.3005262e-15, 0.0050000004, -6.938894e-18)
|
||||
bones/15/rotation = Quaternion(1.0181552e-08, -7.03121e-09, 0.92124933, 0.38897285)
|
||||
bones/15/rotation = Quaternion(1.0160434e-08, -7.0616895e-09, 0.92007947, 0.39173177)
|
||||
bones/15/scale = Vector3(1, 1, 1)
|
||||
bones/16/position = Vector3(7.632945e-11, 0.007071071, 6.938894e-18)
|
||||
bones/16/rotation = Quaternion(0.025212372, -0.04779956, -0.18591446, 0.9810787)
|
||||
bones/16/rotation = Quaternion(0.027662799, -0.041891776, -0.18596037, 0.981274)
|
||||
bones/16/scale = Vector3(0.99999994, 0.9999999, 1)
|
||||
bones/18/position = Vector3(-0.005, 0.005, -1.7303326e-21)
|
||||
bones/18/rotation = Quaternion(0.64759296, 0.20328435, -0.1040828, -0.7269564)
|
||||
bones/18/rotation = Quaternion(0.64603364, 0.20885898, -0.09923112, -0.7274418)
|
||||
bones/18/scale = Vector3(1, 0.99999994, 1)
|
||||
bones/19/position = Vector3(-1.3005262e-15, 0.0050000004, -6.938894e-18)
|
||||
bones/19/rotation = Quaternion(-1.8158344e-08, -3.722307e-08, -0.18551208, 0.98264205)
|
||||
bones/19/rotation = Quaternion(-1.7631736e-08, -3.747539e-08, -0.17163937, 0.98515993)
|
||||
bones/19/scale = Vector3(1, 1, 1)
|
||||
bones/20/position = Vector3(-2.2286711e-10, 0.007071072, 0)
|
||||
bones/20/rotation = Quaternion(-0.1351793, -0.45971006, -0.16690832, 0.86170465)
|
||||
bones/20/rotation = Quaternion(-0.13869229, -0.45811948, -0.17229414, 0.8609331)
|
||||
bones/20/scale = Vector3(1, 0.9999999, 1)
|
||||
bones/22/position = Vector3(0.012072118, -0.0085772155, 0.0023066779)
|
||||
bones/22/position = Vector3(0.012243621, -0.0085772155, 0.0022597443)
|
||||
bones/22/rotation = Quaternion(3.090862e-08, 0.70710677, 0.70710677, 3.090862e-08)
|
||||
bones/22/scale = Vector3(1, 1, 1)
|
||||
bones/24/position = Vector3(-0.011000002, 0.0050000013, 0.0070000007)
|
||||
@ -120,18 +121,46 @@ bones/34/scale = Vector3(1, 1, 1)
|
||||
bones/36/position = Vector3(-0.002, -0.00568604, -0.02264523)
|
||||
bones/36/rotation = Quaternion(0, 0, 0, 1)
|
||||
|
||||
[node name="soldier_skeleton_modifier" type="SoldierSkeletonModifier" parent="SoldierM/Soldier/Skeleton3D" index="1" unique_id=248671730]
|
||||
transform = Transform3D(1, -2.2737368e-13, 0, 2.2737368e-13, 1, 0, -1.3552527e-20, 0, 1, 0.007936426, -0.022856388, 0.010735709)
|
||||
[node name="look_at_modifier_3d" type="LookAtModifier3D" parent="SoldierM/Soldier/Skeleton3D" index="1" unique_id=1054155740]
|
||||
target_node = NodePath("../../../../look_at_root/look_at")
|
||||
bone_name = "HEAD"
|
||||
bone = 11
|
||||
forward_axis = 5
|
||||
origin_from = 2
|
||||
origin_external_node = NodePath("../../../../look_at_root")
|
||||
|
||||
[node name="look_at_modifier_3d2" type="LookAtModifier3D" parent="SoldierM/Soldier/Skeleton3D" index="2" unique_id=916451501]
|
||||
transform = Transform3D(1, -2.2737368e-13, 0, 2.2737368e-13, 1, 0, -1.3552527e-20, 0, 1, 0, 0, 0)
|
||||
target_node = NodePath("../../../../look_at_root/look_at")
|
||||
bone_name = "UA.R"
|
||||
bone = 14
|
||||
forward_axis = 1
|
||||
relative = true
|
||||
origin_from = 2
|
||||
origin_external_node = NodePath("../../../../look_at_root")
|
||||
|
||||
[node name="look_at_modifier_3d3" type="LookAtModifier3D" parent="SoldierM/Soldier/Skeleton3D" index="3" unique_id=1721786929]
|
||||
transform = Transform3D(1, -6.82121e-13, 0, 6.82121e-13, 1, 0, -4.065758e-20, 0, 1, 0, 0, 0)
|
||||
target_node = NodePath("../../../../look_at_root/look_at")
|
||||
bone_name = "UA.L"
|
||||
bone = 18
|
||||
forward_axis = 2
|
||||
primary_rotation_axis = 2
|
||||
relative = true
|
||||
origin_from = 2
|
||||
origin_external_node = NodePath("../../../../look_at_root")
|
||||
|
||||
[node name="bone_attachment_3d" type="BoneAttachment3D" parent="." unique_id=1964353847]
|
||||
transform = Transform3D(-16.315157, 39.74509, -90.300285, -95.4447, 16.81778, 24.646877, 24.982435, 90.208015, 35.19075, -0.20875436, 3.1938982, 0.68449914)
|
||||
transform = Transform3D(-31.74573, 3.559949, -94.760414, -86.96872, 38.738197, 30.590748, 37.797493, 92.12316, -9.201678, -0.47878417, 3.3534346, 0.7443533)
|
||||
bone_name = "HAND.R_end"
|
||||
bone_idx = 17
|
||||
use_external_skeleton = true
|
||||
external_skeleton = NodePath("../SoldierM/Soldier/Skeleton3D")
|
||||
|
||||
[node name="hand" type="Node3D" parent="bone_attachment_3d" unique_id=171636900]
|
||||
transform = Transform3D(0.0009882095, -0.014535081, -0.0035712845, -0.0056050573, 0.0029592454, -0.0135950465, 0.0138782775, 0.0022301476, -0.0052363835, 0.0019110721, -0.0009642476, -0.000241803)
|
||||
transform = Transform3D(0.0039180024, -0.013382489, -0.0055279233, 0.00012702314, 0.005758277, -0.013850107, 0.014478719, 0.0035708423, 0.0016173583, 0.003051471, -0.0019010007, -0.002960747)
|
||||
|
||||
[node name="Raygun" parent="bone_attachment_3d/hand" unique_id=1928455392 instance=ExtResource("3_jbny0")]
|
||||
|
||||
[node name="animation_tree" type="AnimationTree" parent="." unique_id=1221968603]
|
||||
root_node = NodePath("../SoldierM")
|
||||
@ -139,4 +168,10 @@ tree_root = SubResource("AnimationNodeBlendTree_kgpx5")
|
||||
anim_player = NodePath("../SoldierM/AnimationPlayer")
|
||||
parameters/Movement/blend_position = Vector2(0, 0)
|
||||
|
||||
[node name="look_at_root" type="Node3D" parent="." unique_id=107308061]
|
||||
transform = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, 0, 3.7622375, 0)
|
||||
|
||||
[node name="look_at" type="Node3D" parent="look_at_root" unique_id=1308525699]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2.698)
|
||||
|
||||
[editable path="SoldierM"]
|
||||
|
||||
@ -18,7 +18,7 @@ pub struct SoldierMesh {
|
||||
#[export]
|
||||
raygun: Option<Gd<PackedScene>>,
|
||||
#[export]
|
||||
skeleton_modifier: Option<Gd<SoldierSkeletonModifier>>,
|
||||
look_at: Option<Gd<Node3D>>,
|
||||
|
||||
base: Base<Node3D>,
|
||||
}
|
||||
@ -36,8 +36,8 @@ impl SoldierMesh {
|
||||
}
|
||||
|
||||
pub fn update_y_look(&mut self, rotation: f32) {
|
||||
if let Some(skeleton) = &mut self.skeleton_modifier {
|
||||
skeleton.bind_mut().rotation = rotation;
|
||||
if let Some(node) = &mut self.look_at {
|
||||
node.set_rotation(Vector3::RIGHT * -rotation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,30 +54,3 @@ impl SoldierMesh {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(GodotClass)]
|
||||
#[class(base=SkeletonModifier3D, init)]
|
||||
pub struct SoldierSkeletonModifier {
|
||||
pub rotation: f32,
|
||||
|
||||
base: Base<SkeletonModifier3D>,
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl ISkeletonModifier3D for SoldierSkeletonModifier {
|
||||
fn process_modification_with_delta(&mut self, _delta: f64) {
|
||||
let rot = self.rotation;
|
||||
let rhand_quat = Quaternion::from_euler(Vector3::FORWARD * -rot);
|
||||
let lhand_quat = Quaternion::from_euler(Vector3::RIGHT * rot);
|
||||
if let Some(skeleton) = &mut self.base_mut().get_skeleton() {
|
||||
let head_idx = skeleton.find_bone("HEAD");
|
||||
let uar_idx = skeleton.find_bone("UA.R");
|
||||
let uar_rot = skeleton.get_bone_pose_rotation(uar_idx);
|
||||
let ual_idx = skeleton.find_bone("UA.L");
|
||||
let ual_rot = skeleton.get_bone_pose_rotation(ual_idx);
|
||||
skeleton.set_bone_pose_rotation(head_idx, Quaternion::from_euler(Vector3::RIGHT * rot));
|
||||
skeleton.set_bone_pose_rotation(uar_idx, uar_rot * rhand_quat);
|
||||
skeleton.set_bone_pose_rotation(ual_idx, ual_rot * lhand_quat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user