3 Commits

Author SHA1 Message Date
aadd546733 Change @ to link in README.md 2025-03-24 11:12:29 -07:00
a65dd2614b Merge pull request 'fix: non-uniform scaling' (#1) from flxw/quality-godot-first-person:fix/non-uniform-scaling into main
Looks fine, will merge.
Reviewed-on: #1
2025-02-17 18:11:46 -08:00
6b9bc218f0 fix: non-uniform scaling 2025-02-15 14:18:06 +01:00
2 changed files with 51 additions and 51 deletions

View File

@ -37,7 +37,7 @@ You can make this a super basic controller by just disabling everything.
- You should now be able to look around with the joystick. Make sure you add the other controls to the input map. (movement, jumping, crouching, sprinting, etc.) - You should now be able to look around with the joystick. Make sure you add the other controls to the input map. (movement, jumping, crouching, sprinting, etc.)
**Slope/staircase:** **Slope/staircase:**
Credit to @roberto-urbani23 Credit to [roberto-urbani23](https://github.com/roberto-urbani23)
In the character inspector, you can uncheck Stop on Slope and set the max angle to 89 (for some reason, 90 will make the player stuck). Also Snap Length to 1 otherwise your character will not remain attached to stairs if you sprint while going downstairs. In the character inspector, you can uncheck Stop on Slope and set the max angle to 89 (for some reason, 90 will make the player stuck). Also Snap Length to 1 otherwise your character will not remain attached to stairs if you sprint while going downstairs.
**How to change settings:** **How to change settings:**

View File

@ -20,62 +20,62 @@ length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("Mesh:scale") tracks/0/path = NodePath("Mesh:position")
tracks/0/interp = 2 tracks/0/interp = 2
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector3(1, 1, 1)] "values": [Vector3(0, 1, 0)]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
tracks/1/enabled = true tracks/1/enabled = true
tracks/1/path = NodePath("Collision:scale") tracks/1/path = NodePath("Collision:position")
tracks/1/interp = 2 tracks/1/interp = 2
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector3(1, 1, 1)] "values": [Vector3(0, 1, 0)]
} }
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("Mesh:position") tracks/2/path = NodePath("Head:position")
tracks/2/interp = 2 tracks/2/interp = 2
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector3(0, 1, 0)] "values": [Vector3(0, 1.5, 0)]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("Collision:position") tracks/3/path = NodePath("Mesh:mesh:height")
tracks/3/interp = 2 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector3(0, 1, 0)] "values": [2.0]
} }
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Head:position") tracks/4/path = NodePath("Collision:shape:height")
tracks/4/interp = 2 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector3(0, 1.5, 0)] "values": [2.0]
} }
[sub_resource type="Animation" id="Animation_5ec5e"] [sub_resource type="Animation" id="Animation_5ec5e"]
@ -84,62 +84,62 @@ length = 0.2
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("Mesh:scale") tracks/0/path = NodePath("Mesh:position")
tracks/0/interp = 2 tracks/0/interp = 2
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector3(1, 1, 1), Vector3(1, 0.75, 1)] "values": [Vector3(0, 1, 0), Vector3(0, 0.75, 0)]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
tracks/1/enabled = true tracks/1/enabled = true
tracks/1/path = NodePath("Collision:scale") tracks/1/path = NodePath("Collision:position")
tracks/1/interp = 2 tracks/1/interp = 2
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector3(1, 1, 1), Vector3(1, 0.75, 1)] "values": [Vector3(0, 1, 0), Vector3(0, 0.75, 0)]
} }
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("Mesh:position") tracks/2/path = NodePath("Head:position")
tracks/2/interp = 2 tracks/2/interp = 2
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 0.75, 0)] "values": [Vector3(0, 1.5, 0), Vector3(0, 1.12508, 0)]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("Collision:position") tracks/3/path = NodePath("Mesh:mesh:height")
tracks/3/interp = 2 tracks/3/interp = 2
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 0.75, 0)] "values": [2.0, 1.5]
} }
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Head:position") tracks/4/path = NodePath("Collision:shape:height")
tracks/4/interp = 2 tracks/4/interp = 2
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector3(0, 1.5, 0), Vector3(0, 1.12508, 0)] "values": [2.0, 1.5]
} }
[sub_resource type="AnimationLibrary" id="AnimationLibrary_5e5t5"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_5e5t5"]
@ -279,6 +279,34 @@ tracks/0/keys = {
"values": [Vector3(0, 0, 0), Vector3(0.0349066, 0, 0), Vector3(0, 0, 0)] "values": [Vector3(0, 0, 0), Vector3(0.0349066, 0, 0), Vector3(0, 0, 0)]
} }
[sub_resource type="Animation" id="Animation_3eyjl"]
resource_name = "land_center"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Camera:rotation")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(-0.0349066, 0, 0), Vector3(0, 0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Camera:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 1.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, -0.1, 0), Vector3(0, 0, 0)]
}
[sub_resource type="Animation" id="Animation_l1rph"] [sub_resource type="Animation" id="Animation_l1rph"]
resource_name = "land_left" resource_name = "land_left"
length = 1.5 length = 1.5
@ -335,34 +363,6 @@ tracks/1/keys = {
"values": [Vector3(0, 0, 0), Vector3(0, -0.1, 0), Vector3(0, 0, 0)] "values": [Vector3(0, 0, 0), Vector3(0, -0.1, 0), Vector3(0, 0, 0)]
} }
[sub_resource type="Animation" id="Animation_3eyjl"]
resource_name = "land_center"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Camera:rotation")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(-0.0349066, 0, 0), Vector3(0, 0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Camera:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 1.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, -0.1, 0), Vector3(0, 0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qeg5r"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_qeg5r"]
_data = { _data = {
"RESET": SubResource("Animation_fvvjq"), "RESET": SubResource("Animation_fvvjq"),