You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
5.4 KiB
150 lines
5.4 KiB
10 months ago
|
using UnityEngine;
|
||
|
|
||
|
/******************************************************************************
|
||
|
* This class provides basic movement controls to a player sprite in the scene.
|
||
|
* It responds to the basic keyboard movement commands and will use the sprite
|
||
|
* and animator to face the object in the correct direction as it moves.
|
||
|
*
|
||
|
* SETUP
|
||
|
* SpriteRenderer
|
||
|
* Start by setting up the player object using a SpriteRenderer, easily done by
|
||
|
* dragging the image into the scene.
|
||
|
*
|
||
|
* RigidBody2D
|
||
|
* This script moves the player object on screen by interacting with the
|
||
|
* rigidbody2d component. Don't forget to set the Gravity Scale to 0 and check
|
||
|
* the Freeze Rotation Z option. If you forget the object will slowly slide
|
||
|
* down the screen.
|
||
|
*
|
||
|
* Animator
|
||
|
* Add an animator component to the player object. The referenced Animator
|
||
|
* controller will have the walking, running, etc animations setup in mecanim
|
||
|
* For the purpose of this script, you will need to configure the following
|
||
|
* parameters in the controller and then set the animation transitions to
|
||
|
* match.
|
||
|
* - yMove : Integer
|
||
|
* - xMove : Boolean
|
||
|
* - moving : Boolean
|
||
|
*
|
||
|
* Finally, attach this script to the player object. At this point, create a
|
||
|
* prefab out of the object.
|
||
|
*
|
||
|
* Enhancements:
|
||
|
* - Add mouse click control to the movement.
|
||
|
******************************************************************************/
|
||
|
public class CharacterMovement : MonoBehaviour
|
||
|
{
|
||
|
/**************************************************************************
|
||
|
* These variables setup references to the player object in the game scene.
|
||
|
* At a minimum, the player object needs to be a 2D sprite and have a 2D
|
||
|
* RigidBody for this script to work. The animation component is not
|
||
|
* critical to the script, but the script will attempt to set animation
|
||
|
* variables so that the player image will appear to move on the screen.
|
||
|
**************************************************************************/
|
||
|
private SpriteRenderer playerSpriteImage;
|
||
|
private Rigidbody2D playerRigidBody2D;
|
||
|
private Animator playerAnim;
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
* These variables manage the player's movement on screen. Speed can be set
|
||
|
* in the Unity IDE or in code.
|
||
|
**************************************************************************/
|
||
|
//Variable to track how much movement is needed from input
|
||
|
private float movePlayerHorizontal;
|
||
|
private float movePlayerVertical;
|
||
|
private Vector2 movement;
|
||
|
|
||
|
// Speed modifier for player movement
|
||
|
public float speed = 4.0f;
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// This method is connecting the script to the components of the player object
|
||
|
/// in the scene. The player object should have each of these components added
|
||
|
/// along with this script to make up a complete player.
|
||
|
/// </summary>
|
||
|
void Awake()
|
||
|
{
|
||
|
playerRigidBody2D = (Rigidbody2D)GetComponent(typeof(Rigidbody2D));
|
||
|
playerAnim = (Animator)GetComponent(typeof(Animator));
|
||
|
playerSpriteImage = (SpriteRenderer)GetComponent(typeof(SpriteRenderer));
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// The update method does the work of moving the player object on the screen
|
||
|
/// in the desired direction. It also uses the animation and sprite components
|
||
|
/// to "face" the player in the right direction.
|
||
|
/// </summary>
|
||
|
void Update()
|
||
|
{
|
||
|
// The first step is to get the player's input to determine which direction
|
||
|
// to move the player object, then use speed to set the movement.
|
||
|
movePlayerHorizontal = Input.GetAxis("Horizontal");
|
||
|
movePlayerVertical = Input.GetAxis("Vertical");
|
||
|
movement = new Vector2(movePlayerHorizontal, movePlayerVertical);
|
||
|
|
||
|
playerRigidBody2D.velocity = movement * speed;
|
||
|
|
||
|
// This section handles the animation control to make sure that the player
|
||
|
// object is facing in the right direction during movement. It is basically
|
||
|
// setting animation variables that should be setup in the mecanim library.
|
||
|
// Mecanim does the work of dislaying animations.
|
||
|
if (movePlayerVertical == 0 && movePlayerHorizontal == 0)
|
||
|
{
|
||
|
playerAnim.SetBool("moving", false);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
playerAnim.SetBool("moving", true);
|
||
|
}
|
||
|
|
||
|
if (movePlayerVertical != 0)
|
||
|
{
|
||
|
playerAnim.SetBool("xMove", false);
|
||
|
playerSpriteImage.flipX = false;
|
||
|
|
||
|
if (movePlayerVertical > 0)
|
||
|
{
|
||
|
playerAnim.SetInteger("yMove", 1);
|
||
|
|
||
|
}
|
||
|
else if (movePlayerVertical < 0)
|
||
|
{
|
||
|
playerAnim.SetInteger("yMove", -1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
playerAnim.SetInteger("yMove", 0);
|
||
|
|
||
|
if (movePlayerHorizontal > 0)
|
||
|
{
|
||
|
playerAnim.SetBool("xMove", true);
|
||
|
playerSpriteImage.flipX = false;
|
||
|
|
||
|
}
|
||
|
else if (movePlayerHorizontal < 0)
|
||
|
{
|
||
|
playerAnim.SetBool("xMove", true);
|
||
|
playerSpriteImage.flipX = true;
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
playerAnim.SetBool("xMove", false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (movePlayerVertical == 0 && movePlayerHorizontal == 0)
|
||
|
{
|
||
|
playerAnim.SetBool("moving", false);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
playerAnim.SetBool("moving", true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|