Skip to content

Commit

Permalink
Fix look_at_from_position() usage in Your first 2D game tutorial
Browse files Browse the repository at this point in the history
The mob's orientation was previously shifted according to the player's
height, which could lead to collision and movement issues that were
difficult to diagnose.
  • Loading branch information
Calinou committed Feb 10, 2025
1 parent 1d9c4a4 commit 14823a2
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions getting_started/first_3d_game/04.mob_scene.rst
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,11 @@ between ``-PI / 4`` radians and ``PI / 4`` radians.
func initialize(start_position, player_position):
# We position the mob by placing it at start_position
# and rotate it towards player_position, so it looks at the player.
look_at_from_position(start_position, player_position, Vector3.UP)
#
# Ignore the player's height, so that the mob's orientation is not slightly
# shifted if the mob spawns while the player is jumping.
var target = Vector3(player_position.x, start_position.y, player_position.z)
look_at_from_position(start_position, target, Vector3.UP)
# Rotate this mob randomly within range of -45 and +45 degrees,
# so that it doesn't move directly towards the player.
rotate_y(randf_range(-PI / 4, PI / 4))
Expand All @@ -172,7 +176,11 @@ between ``-PI / 4`` radians and ``PI / 4`` radians.
{
// We position the mob by placing it at startPosition
// and rotate it towards playerPosition, so it looks at the player.
LookAtFromPosition(startPosition, playerPosition, Vector3.Up);
//
// Ignore the player's height, so that the mob's orientation is not slightly
// shifted if the mob spawns while the player is jumping.
Vector3 target = new Vector3(player_position.x, start_position.y, player_position.z);
LookAtFromPosition(startPosition, target, Vector3.Up);
// Rotate this mob randomly within range of -45 and +45 degrees,
// so that it doesn't move directly towards the player.
RotateY((float)GD.RandRange(-Mathf.Pi / 4.0, Mathf.Pi / 4.0));
Expand Down Expand Up @@ -271,7 +279,11 @@ Here is the complete ``mob.gd`` script for reference.
func initialize(start_position, player_position):
# We position the mob by placing it at start_position
# and rotate it towards player_position, so it looks at the player.
look_at_from_position(start_position, player_position, Vector3.UP)
#
# Ignore the player's height, so that the mob's orientation is not slightly
# shifted if the mob spawns while the player is jumping.
var target = Vector3(player_position.x, start_position.y, player_position.z)
look_at_from_position(start_position, target, Vector3.UP)
# Rotate this mob randomly within range of -45 and +45 degrees,
# so that it doesn't move directly towards the player.
rotate_y(randf_range(-PI / 4, PI / 4))
Expand Down Expand Up @@ -310,7 +322,11 @@ Here is the complete ``mob.gd`` script for reference.
{
// We position the mob by placing it at startPosition
// and rotate it towards playerPosition, so it looks at the player.
LookAtFromPosition(startPosition, playerPosition, Vector3.Up);
//
// Ignore the player's height, so that the mob's orientation is not slightly
// shifted if the mob spawns while the player is jumping.
Vector3 target = new Vector3(player_position.x, start_position.y, player_position.z);
LookAtFromPosition(startPosition, target, Vector3.Up);
// Rotate this mob randomly within range of -45 and +45 degrees,
// so that it doesn't move directly towards the player.
RotateY((float)GD.RandRange(-Mathf.Pi / 4.0, Mathf.Pi / 4.0));
Expand Down

0 comments on commit 14823a2

Please sign in to comment.