diff --git a/getting_started/first_3d_game/04.mob_scene.rst b/getting_started/first_3d_game/04.mob_scene.rst index 5c63fd6db46..233f34bc3d6 100644 --- a/getting_started/first_3d_game/04.mob_scene.rst +++ b/getting_started/first_3d_game/04.mob_scene.rst @@ -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)) @@ -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(playerPosition.X, startPosition.Y, playerPosition.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)); @@ -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)) @@ -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(playerPosition.X, startPosition.Y, playerPosition.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));