Zefirot
@Zefirot

От чего происходит залипание?

Делаю простое передвижение камеры
void Update(){
            MoveCamera();
        }
public bool IsPointerOverUIObject() {
        PointerEventData ep = new PointerEventData(EventSystem.current);
        ep.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(ep, results);
        return results.Count > 0;
        }
    private void MoveCamera(){
                if(!IsPointerOverUIObject()){
                    if(Input.GetMouseButtonDown(0)){ CurrentPositionCamera = MainCamera.ScreenToWorldPoint(Input.mousePosition); }
                    if(Input.GetMouseButton(0)){ VerifyBoundCamera(); }else{ CameraMove = false; }
                    if(Input.GetMouseButtonUp(0)){ CameraMove = false; }
                    }else{ CameraMove = false; CurrentPositionCamera = MainCamera.ScreenToWorldPoint(Input.mousePosition); }
                }
        }
    private void VerifyBoundCamera(){
        PosInputMouse = MainCamera.ScreenToWorldPoint(Input.mousePosition);
        DifferencePositionCamera = CurrentPositionCamera - PosInputMouse;
        if(MainCamera.transform.position.y + DifferencePositionCamera.y > MaxY){
            DifferencePositionCamera.y = 0f;
            CurrentPositionCamera = new Vector3(CurrentPositionCamera.x, PosInputMouse.y, -1f);
            }else if(MainCamera.transform.position.y + DifferencePositionCamera.y < MinY){
                DifferencePositionCamera.y = 0f;
                CurrentPositionCamera = new Vector3(CurrentPositionCamera.x, PosInputMouse.y, -1f);
                }
        if(MainCamera.transform.position.x + DifferencePositionCamera.x > MaxX){
            DifferencePositionCamera.x = 0f;
            CurrentPositionCamera = new Vector3(PosInputMouse.x, CurrentPositionCamera.y, -1f);
            }else if(MainCamera.transform.position.x + DifferencePositionCamera.x < MinX){
                DifferencePositionCamera.x = 0f;
                CurrentPositionCamera = new Vector3(PosInputMouse.x, CurrentPositionCamera.y, -1f);
                }
        if(DifferencePositionCamera != PrevPositionCamera){
            MainCamera.transform.position += DifferencePositionCamera;
            PrevPositionCamera = DifferencePositionCamera;
            CameraMove = true;
            }else CameraMove = false;
        }

Все двигается как положено, но иногда происходит залипание. То есть, так движение происходит когда зажата левая кнопка мыши, а при отпускании останавливается, а так редко, но бывает, что кнопка отпущена, но движение за мышкой остается, пока снова не нажать. В чём может быть проблема?
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
@BFGunner
Не стал проверять весь скрипт, но заметил следующее:
1. Проверки однократного нажатия не стоят рядом друг с другом. Т.е. после проверки однократного нажатия запускается проверка долговременного нажатия.
2. При проверке долговременного нажатия запускается метод, который пока не отработает полностью, будет продолжать движение
3. Затык может быть вызван именно этим. Т.е. в методе запускаемом при проверке нажатия есть неправильное логическое условие, которое продолжает движение.

Выход:
1. Поставить проверки Down и Up друг за другом
2. Закомментировать Down и Up и проверить как работает лишь getButton
3. Если getButton работает нормально при комментировании Up и Down, искать причины
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы