diff --git a/tutorials/3d/img/transforms_camera.png b/tutorials/3d/img/transforms_camera.png index 1d7b345361a..6ae644affd6 100644 Binary files a/tutorials/3d/img/transforms_camera.png and b/tutorials/3d/img/transforms_camera.png differ diff --git a/tutorials/3d/using_transforms.rst b/tutorials/3d/using_transforms.rst index df9eccd09d3..34175b02108 100644 --- a/tutorials/3d/using_transforms.rst +++ b/tutorials/3d/using_transforms.rst @@ -241,18 +241,24 @@ Obtaining information You might be thinking at this point: **"Ok, but how do I get angles from a transform?"**. The answer again is: you don't. You must do your best to stop thinking in angles. -Imagine you need to shoot a bullet in the direction your player is facing. Just use the forward axis (commonly ``Z`` or ``-Z``). +Imagine you need to shoot a bullet in the direction your player is facing. Just use the forward axis. .. tabs:: .. code-tab:: gdscript GDScript + # On RigidBody3D. + + # Keep in mind that -Z is forward. bullet.transform = transform - bullet.speed = transform.basis.z * BULLET_SPEED + bullet.linear_velocity = -transform.basis.z * BULLET_SPEED .. code-tab:: csharp - bullet.Transform = transform; - bullet.LinearVelocity = transform.Basis.Z * BulletSpeed; + // On RigidBody3D. + + // Keep in mind that -Z is forward. + bullet.Transform = Transform; + bullet.LinearVelocity = -Transform.Basis.Z * BulletSpeed; Is the enemy looking at the player? Use the dot product for this (see the :ref:`doc_vector_math` tutorial for an explanation of the dot product): @@ -278,24 +284,34 @@ Strafe left: .. tabs:: .. code-tab:: gdscript GDScript - # Remember that +X is right + # On CharacterBody3D. + + # Keep in mind that -X is left. if Input.is_action_pressed("strafe_left"): - translate_object_local(-transform.basis.x) + velocity = -transform.basis.x * MOVE_SPEED + + move_and_slide() .. code-tab:: csharp - // Remember that +X is right + // On CharacterBody3D. + + // Keep in mind that -X is left. if (Input.IsActionPressed("strafe_left")) { - TranslateObjectLocal(-Transform.Basis.X); + Velocity = -Transform.Basis.X * MoveSpeed; } + MoveAndSlide(); + Jump: .. tabs:: .. code-tab:: gdscript GDScript - # Keep in mind Y is up-axis + # On CharacterBody3D. + + # Keep in mind that +Y is up. if Input.is_action_just_pressed("jump"): velocity.y = JUMP_SPEED @@ -303,10 +319,12 @@ Jump: .. code-tab:: csharp - // Keep in mind Y is up-axis + // On CharacterBody3D. + + // Keep in mind that +Y is up. if (Input.IsActionJustPressed("jump")) { - velocity.Y = JumpSpeed; + Velocity = Vector3.Up * JumpSpeed; } MoveAndSlide(); @@ -332,8 +350,8 @@ Example of looking around, FPS style: func _input(event): if event is InputEventMouseMotion and event.button_mask & 1: # modify accumulated mouse rotation - rot_x += event.relative.x * LOOKAROUND_SPEED - rot_y += event.relative.y * LOOKAROUND_SPEED + rot_x -= event.relative.x * LOOKAROUND_SPEED + rot_y -= event.relative.y * LOOKAROUND_SPEED transform.basis = Basis() # reset rotation rotate_object_local(Vector3(0, 1, 0), rot_x) # first rotate in Y rotate_object_local(Vector3(1, 0, 0), rot_y) # then rotate in X @@ -349,8 +367,8 @@ Example of looking around, FPS style: if (@event is InputEventMouseMotion mouseMotion) { // modify accumulated mouse rotation - _rotationX += mouseMotion.Relative.X * LookAroundSpeed; - _rotationY += mouseMotion.Relative.Y * LookAroundSpeed; + _rotationX -= mouseMotion.Relative.X * LookAroundSpeed; + _rotationY -= mouseMotion.Relative.Y * LookAroundSpeed; // reset rotation Transform3D transform = Transform;