Проблемы при попытке запретить выход за границы камеры (Unity 2d)
Ниже я прикрепил скрипт, который осуществляет управление персонажем клавиатурой и не даёт выйти за границы камеры. Код работает, но есть 2 проблемы.
Персонаж останавливается не дойдя до конца границы, примерно на 20 пикселей. Можно конечно использовать в вычислениях ширину и высоту персонажа (spriteWidth и spriteHeight) на 20 пикселей меньше реальных, но мне нужно понять в чем ошибка.
Когда персонаж почти дошел до границы камеры, он останавливается на 0.5 сек, а потом резко дергается и уже тогда достигает границы и полностью останавливается.
using UnityEngine;
public class PController : MonoBehaviour
{
private float spriteWidth = 100;
private float spriteHeight = 80;
public float speed = 6f;
void Start()
{
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.gravityScale = 0;
rb.freezeRotation = true;
}
void FixedUpdate()
{
ControlMovement();
}
void ControlMovement()
{
float horDirection = Input.GetAxis("Horizontal");
float vertDirection = Input.GetAxis("Vertical");
Vector3 newPos = transform.position + new Vector3(horDirection, vertDirection, 0) * speed * Time.deltaTime;
if (!IsExitCameraBorder(newPos))
{
transform.position = newPos;
}
}
private bool IsExitCameraBorder(Vector3 newPos)
{
Vector3 screenPoint = MainCamera.Instance.WorldToScreenPoint(newPos);
bool isExitBottom = screenPoint.y < spriteHeight / 2;
bool isExitTop = screenPoint.y > Camera.main.pixelHeight - StatusBar.STATUS_BAR_HEIGHT - spriteHeight / 2;
bool isExitLeft = screenPoint.x > Camera.main.pixelWidth - spriteWidth / 2;
bool isExitRight = screenPoint.x < spriteWidth / 2;
return isExitBottom || isExitTop || isExitLeft || isExitRight;
}
}