using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float playerSpeed = 7.0f;
[SerializeField] private LayerMask collisionLayer;
[SerializeField] private Vector2 inputVector;
[SerializeField] private InputManager inputManager;
[SerializeField] private float horizontalRaycastDistance = 0.5f;
[SerializeField] private float verticalRaycastDistance = 0.5f;
void Update()
{
float horizontal = inputManager.horizontalInput;
float vertical = inputManager.verticalInput;
inputVector = new Vector2(horizontal, vertical).normalized;
}
void FixedUpdate()
{
Move();
}
void Move()
{
Vector2 velocity = inputVector * playerSpeed * Time.fixedDeltaTime;
Vector2 newPosition = transform.position;
//Debug.Log("Velocity: " + velocity);
float horizontalDirection = Mathf.Sign(velocity.x);
RaycastHit2D horizontalHit = Physics2D.Raycast(transform.position, Vector2.right * horizontalDirection, Mathf.Abs(velocity.x) + horizontalRaycastDistance, collisionLayer);
if (horizontalHit.collider != null)
{
velocity.x = 0;
newPosition.x = horizontalHit.point.x - horizontalDirection * horizontalRaycastDistance;
//Debug.Log("Horizontal Hit: " + horizontalHit.collider.name);
}
//Debug.DrawRay(transform.position, Vector2.right * horizontalDirection * (Mathf.Abs(velocity.x) + horizontalRaycastDistance), Color.red);
float verticalDirection = Mathf.Sign(velocity.y);
RaycastHit2D verticalHit = Physics2D.Raycast(transform.position, Vector2.up * verticalDirection, Mathf.Abs(velocity.y) + verticalRaycastDistance, collisionLayer);
if (verticalHit.collider != null)
{
velocity.y = 0;
newPosition.y = verticalHit.point.y - verticalDirection * verticalRaycastDistance;
//Debug.Log("Vertical Hit: " + verticalHit.collider.name);
}
Debug.DrawRay(transform.position, Vector2.up * verticalDirection * (Mathf.Abs(velocity.y) + verticalRaycastDistance), Color.red);
newPosition += velocity;
transform.position = newPosition;
}
}
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float playerSpeed = 7.0f;
[SerializeField] private float collisionCheckRadius = 0.5f;
[SerializeField] private LayerMask collisionLayer;
[SerializeField] private Vector2 inputVector;
[SerializeField] private InputManager inputManager;
void Update()
{
float horizontal = inputManager.horizontalInput;
float vertical = inputManager.verticalInput;
inputVector = new Vector2(horizontal, vertical).normalized;
Move();
}
void Move()
{
Vector2 velocity = inputVector * playerSpeed * Time.deltaTime;
RaycastHit2D hit = Physics2D.CircleCast(transform.position+(Vector3)velocity , collisionCheckRadius, velocity.normalized, velocity.magnitude, collisionLayer);
if (hit.collider != null)
{
//return;
Vector2 normal = hit.normal;
Debug.Log(Mathf.Abs(normal.x) + " " + Mathf.Abs(normal.y));
if (Mathf.Abs(normal.x) >= Mathf.Abs(normal.y))
{
velocity.x = 0;
}
if (Mathf.Abs(normal.x) <= Mathf.Abs(normal.y))
{
velocity.y = 0;
}
if (0f < Mathf.Abs(normal.x) && 1f > Mathf.Abs(normal.x) || 0f < Mathf.Abs(normal.y) && 1f > Mathf.Abs(normal.y) || Mathf.Abs(normal.x) == 1 && Mathf.Abs(normal.y) == 1)
{
return;
}
}
transform.position += (Vector3)velocity;
}
}
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float playerSpeed = 7.0f;
[SerializeField] private float collisionCheckRadius = 0.5f;
[SerializeField] private LayerMask collisionLayer;
[SerializeField] private Vector2 inputVector;
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
inputVector = new Vector2(horizontal, vertical).normalized;
Move();
}
void Move()
{
Vector2 velocity = inputVector * playerSpeed * Time.deltaTime;
RaycastHit2D hit = Physics2D.CircleCast(transform.position, collisionCheckRadius, velocity.normalized, velocity.magnitude, collisionLayer);
if (hit.collider != null)
{
Vector2 normal = hit.normal;
if (Mathf.Abs(normal.x) > Mathf.Abs(normal.y))
{
velocity.x = 0;
if (normal.x > 0)
{
Debug.Log("Удар слева");
}
else
{
Debug.Log("Удар справа");
}
}
else
{
velocity.y = 0;
if (normal.y > 0)
{
Debug.Log("Удар снизу");
}
else
{
Debug.Log("Удар сверху");
}
}
}
transform.position += (Vector3)velocity;
}
}
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private GameObject player;
[SerializeField] private Vector3 playerPosition;
[SerializeField] private float playerSpeed = 7.0f;
[SerializeField] private LayerMask collisionLayer;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
playerPosition = player.transform.position;
}
void Update()
{
Move();
}
void Move()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
playerPosition.y = playerSpeed * vertical * Time.deltaTime;
playerPosition.x = playerSpeed * horizontal * Time.deltaTime;
if(playerPosition.sqrMagnitude == 0)
{
return;
}
if(Physics2D.OverlapCircle(player.transform.position + playerPosition,0.5f, collisionLayer))
{
return;
}
player.transform.position += playerPosition;
}
}
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private GameObject player;
[SerializeField] private Vector2 playerPosition;
[SerializeField] private float playerSpeed = 0.15f;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
playerPosition = player.transform.position;
}
void Update()
{
}
void FixedUpdate()
{
Move();
}
void Move()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
playerPosition.y += playerSpeed * vertical;
playerPosition.x += playerSpeed * horizontal;
player.transform.position = playerPosition;
}
}
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private GameObject player;
[SerializeField] private Vector2 playerVector;
[SerializeField] private float playerSpeed = 0.15f;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
playerVector = player.transform.position;
}
void Update()
{
}
void FixedUpdate()
{
Move();
}
void Move()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
playerVector.y += playerSpeed * vertical;
playerVector.x += playerSpeed * horizontal;
player.transform.position = playerVector;
}
}