Как ограничить движение камеры в скрипте?
Есть скрипт для движения камеры свайпами для стратегии
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)