Как ограничить движение камеры в скрипте?

Есть скрипт для движения камеры свайпами для стратегии

public float panSmoothing;   
void Update()
{
    HandleInput();
}

public void HandleInput()
{
    if(Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        if(touch.phase == TouchPhase.Moved)
        {
            Vector2 pos = touch.deltaPosition;
            Vector3 position = new Vector3(Mathf.Clamp((pos.x / panSmoothing), -70f, 60f), 0, Mathf.Clamp((pos.y / panSmoothing), -65f, 55f));        
            this.transform.position -= position;
        }
    }
}

Мне нужно чтобы камера двигалась до определенных границ, пробовал Mathf.Clamp, но ничего не работает.


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

Автор решения: Yaroslav
[SerializeField] private float _moveFactor = 0.5f;
[SerializeField] private Vector2 _horizontalLimit = new Vector2(-50, 50);
[SerializeField] private Vector2 _verticalLimit = new Vector2(-50, 50);
private Transform _transform;

private void Awake ()
{
    _transform = transform;
}

Private void Update()
{
    HandleInput();
}

Private void HandleInput ()
{
    if(Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        if(touch.phase == TouchPhase.Moved)
        {
            Vector2 Delta = touch.deltaPosition*_moveFactor;
            _transform.localPosition += new Vector3(Delta.x, 0, Delta.y);
            float Cx = Mathf.Clamp(_transform.localPosition.x, _horizontalLimit.x, _horizontalLimit.y);
            float Cz = Mathf.Clamp(_transform.localPosition.z, _verticalLimit.x, _verticalLimit.y);
            _transform.localPosition = new Vector3(Cx, _transform.localPosition.y, Cz);
        }
    }
}
→ Ссылка
Автор решения: SLiver

(кстати, советую вместо update использовать fixedupdate) Добавьте что-то подобное в свой Update:

if(cam.transform.position.x >= rightBorder) //rightBorder - это правая граница камеры по координате X, Вы можете поставить туда любое число или переменную
{
cam.transform.position = new Vector3(rightBorder, cam.transform.position.y, cam.transform.position.z);
}
if(cam.transform.position.x <= leftBorder) //leftBorder - это левая граница камеры по координате X, Вы можете поставить туда любое число или переменную
{
cam.transform.position = new Vector3(leftBorder, cam.transform.position.y, cam.transform.position.z);
}

Теперь всё это, но на русском языке:

Если позиция камеры по Х больше или равна правойГранице, то
Позиция камеры = (позиция правойГраницы по X, позиция камеры по Y, позиция камеры по Z);
Если позиция камеры по Х меньше или равна левойГранице, то
Позиция камеры = (позиция левойГраницы по X, позиция камеры по Y, позиция камеры по Z)
→ Ссылка