Проблемы при попытке запретить выход за границы камеры (Unity 2d)

Ниже я прикрепил скрипт, который осуществляет управление персонажем клавиатурой и не даёт выйти за границы камеры. Код работает, но есть 2 проблемы.

  1. Персонаж останавливается не дойдя до конца границы, примерно на 20 пикселей. Можно конечно использовать в вычислениях ширину и высоту персонажа (spriteWidth и spriteHeight) на 20 пикселей меньше реальных, но мне нужно понять в чем ошибка.

  2. Когда персонаж почти дошел до границы камеры, он останавливается на 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;
    }
}


Ответы (0 шт):