initial commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerController2D : MonoBehaviour
|
||||
{
|
||||
// Public variables
|
||||
public float speed = 5f; // The speed at which the player moves
|
||||
public bool canMoveDiagonally = true; // Controls whether the player can move diagonally
|
||||
|
||||
// Private variables
|
||||
private Rigidbody2D rb; // Reference to the Rigidbody2D component attached to the player
|
||||
private Vector2 movement; // Stores the direction of player movement
|
||||
private bool isMovingHorizontally = true; // Flag to track if the player is moving horizontally
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Initialize the Rigidbody2D component
|
||||
rb = GetComponent<Rigidbody2D>();
|
||||
// Prevent the player from rotating
|
||||
rb.constraints = RigidbodyConstraints2D.FreezeRotation;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// Get player input from keyboard or controller
|
||||
float horizontalInput = Input.GetAxisRaw("Horizontal");
|
||||
float verticalInput = Input.GetAxisRaw("Vertical");
|
||||
|
||||
// Check if diagonal movement is allowed
|
||||
if (canMoveDiagonally)
|
||||
{
|
||||
// Set movement direction based on input
|
||||
movement = new Vector2(horizontalInput, verticalInput);
|
||||
// Optionally rotate the player based on movement direction
|
||||
RotatePlayer(horizontalInput, verticalInput);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Determine the priority of movement based on input
|
||||
if (horizontalInput != 0)
|
||||
{
|
||||
isMovingHorizontally = true;
|
||||
}
|
||||
else if (verticalInput != 0)
|
||||
{
|
||||
isMovingHorizontally = false;
|
||||
}
|
||||
|
||||
// Set movement direction and optionally rotate the player
|
||||
if (isMovingHorizontally)
|
||||
{
|
||||
movement = new Vector2(horizontalInput, 0);
|
||||
RotatePlayer(horizontalInput, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
movement = new Vector2(0, verticalInput);
|
||||
RotatePlayer(0, verticalInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
// Apply movement to the player in FixedUpdate for physics consistency
|
||||
rb.linearVelocity = movement * speed;
|
||||
}
|
||||
|
||||
void RotatePlayer(float x, float y)
|
||||
{
|
||||
// If there is no input, do not rotate the player
|
||||
if (x == 0 && y == 0) return;
|
||||
|
||||
// Calculate the rotation angle based on input direction
|
||||
float angle = Mathf.Atan2(y, x) * Mathf.Rad2Deg;
|
||||
// Apply the rotation to the player
|
||||
transform.rotation = Quaternion.Euler(0, 0, angle);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user