камера для 2d rts игры
Всем привет, подскажите пожалуйста, я создаю камеру для 2D стратегии и столкнулся с проблемой, что при обозначении рамок карты (на которые камера не может зайти) не работает мой скрипт задающий эти рамки, а именно , камеру бросает из стороны в сторону. Буду очень признателен за вашу помощь.
Vector3 mouseScrollStartPos;
Camera myCamera;
[SerializeField]int BorderSize = 10;
[SerializeField] float ScrollSpeed = 30f;
[SerializeField] float ZoomSpeed = 100f;
[SerializeField] float leftLimit;
[SerializeField] float rightLimit;
[SerializeField] float topLimit;
[SerializeField] float buttomLimit;
void Start()
{
myCamera = GetComponent<Camera>();
}
private void Update()
{
HandleMiddleMouseScrolling();
int distanceToTop = myCamera.pixelHeight - (int)Input.mousePosition.y;
int distanceToButtom = (int)Input.mousePosition.y;
int distanceToRight = myCamera.pixelWidth - (int)Input.mousePosition.x;
int distanseToLeft = (int)Input.mousePosition.x;
if(distanceToTop<BorderSize&&distanceToTop>0)
{
myCamera.transform.position += Vector3.up*Time.deltaTime*(BorderSize-distanceToTop)*ScrollSpeed;
}
else if(distanceToButtom<BorderSize&&distanceToButtom>0)
{
myCamera.transform.position += Vector3.down*Time.deltaTime * (BorderSize - distanceToButtom) * ScrollSpeed;
}
if(distanseToLeft<BorderSize&&distanseToLeft>0)
{
myCamera.transform.position += Vector3.left*Time.deltaTime * (BorderSize - distanseToLeft) * ScrollSpeed;
}
else if(distanceToRight<BorderSize&&distanceToRight>0)
{
myCamera.transform.position += Vector3.right*Time.deltaTime * (BorderSize - distanceToRight) * ScrollSpeed;
}
if(Input.mouseScrollDelta.y!=0)
{
myCamera.orthographicSize -= Input.mouseScrollDelta.y * Time.deltaTime*ZoomSpeed;
myCamera.orthographicSize = Mathf.Clamp(myCamera.orthographicSize, 1700, 10500);
}
transform.position = new Vector3(Mathf.Clamp(transform.position.x, leftLimit, rightLimit),
Mathf.Clamp(transform.position.y, topLimit, buttomLimit), transform.position.z);
}
private void HandleMiddleMouseScrolling()
{
if(Input.GetMouseButtonDown(2))
{
mouseScrollStartPos = myCamera.ScreenToWorldPoint(Input.mousePosition);
}
if(Input.GetMouseButton(2))
{
Vector3 movement = Vector3.zero;
movement = myCamera.ScreenToWorldPoint(Input.mousePosition) - mouseScrollStartPos;
myCamera.transform.position -= movement;
}
}
``