Почему перетаскивание объекта касанием на мобильном телефоне телепортирует его в положение касания вместо перемещения со смещением между последним касанием и текущим касанием? - PullRequest
0 голосов
/ 16 июня 2020

, так что это то, что для меня не имеет смысла. Предполагается, что игровой объект (карта) перемещается на разницу между последней позицией касания и текущей позицией касания. Он сначала меняет свое положение на каждое касающееся положение, но затем перемещается так, как предполагалось. Он телепортируется. Я хочу, чтобы он просто двигался по смещению. Он отлично работает с вводом мышью на P C, поэтому меня это сбивает с толку. Прошло много времени с тех пор, как я кодировал, так что, вероятно, это будет что-то глупое. Вот какой-то код:

        if (touch)
        {
            int nbTouches = Input.touchCount;

            if (nbTouches > 0)
            {
                for (int i = 0; i < nbTouches; i++)
                {
                    Touch touch = Input.GetTouch(i);

                    TouchPhase phase = touch.phase;


                    switch (phase)
                    {
                        case TouchPhase.Began:
                            timeTouched = Time.time;
                            touchPos = touch.position;
                            if (G.mapIsOn)
                            {
                                if (!holding)
                                {
                                    holding = true;
                                    Vector3 touchDownPos = touchPos;
                                    touchDownPos.z = Camera.main.nearClipPlane;
                                  //  touchDownPos.z = Camera.main.nearClipPlane - MapController.MC.mapBackground.transform.position.z;
                                    touchDownPos = Camera.main.ScreenToWorldPoint(touchDownPos);
                                    lastTouchPos = touchDownPos;
                                }

                            }
                            break;
                        case TouchPhase.Moved:
                            if (G.mapIsOn && holding)
                            {
                                Vector3 newPos = touch.position;
                                newPos.z = Camera.main.nearClipPlane;
                            //    newPos.z = Camera.main.nearClipPlane - MapController.MC.mapBackground.transform.position.z;
                                newPos = Camera.main.ScreenToWorldPoint(newPos);

                         //       if (lastTouchPos != newPos)
                         //       {
                                    if (onHoldMove != null)
                                    {
                                        onHoldMove(newPos, lastTouchPos);
                                    }
                        //        }
                               /* if (onHoldMoveDelta != null)
                                {
                                    onHoldMoveDelta(touch.deltaPosition);
                                }*/

                                //     mapBackground.transform.position = newMapPos;
                                lastTouchPos = newPos;
                            //    lines.ScaleLines();
                                //  Debug.Log("Moving: " + newPos);
                            }
                            //   print("Touch index " + touch.fingerId + " has moved by " + touch.deltaPosition);
                            break;
                        case TouchPhase.Stationary:
                            //   print("Touch index " + touch.fingerId + " is stationary at position " + touch.position);
                            break;
                        case TouchPhase.Ended:
                         //   if (G.mapIsOn)
                       //     {
                                if (holding) holding = false;
                       //     }
                            if (Time.time - timeTouched <= tapTime)
                            {
                                tapped = true;
                            }
                            break;
                        case TouchPhase.Canceled:
                            //   print("Touch index " + touch.fingerId + " cancelled");
                            break;
                    }
                }

Извините, если форматирование отключено. Также извините за слишком много прокомментированных строк, вы можете видеть, что я пробовал много разных «исправлений».

    public void HandleOnHoldMove(Vector3 newPos, Vector3 lastPos)
    {
        Vector3 offset = lastPos - newPos;
        Vector3 mapPos = mapBackground.transform.position;
        Vector3 newMapPos = new Vector3(mapPos.x - offset.x * mapDragBoost, mapPos.y - offset.y * mapDragBoost, mapPos.z);
        mapBackground.transform.position = newMapPos;
        lines.ScaleLines();
    }

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

сенсорный ввод мгновенно меняет положение. например, ваша мышь не может go сойти с экрана, но вы можете приложить палец к сенсорному устройству.

попробуйте использовать Vector3.Lerp для плавного перехода между старым и новым положением, это должно работать

transform.position = Vector3.lerp(transform.position, //New position, //move speed);
0 голосов
/ 18 июня 2020

Как я и ожидал, это была какая-то глупость, неправильно поставленная скобка для ввода моей мыши. В качестве ввода использовались сенсорное управление и мышь. По какой-то причине мышь действует как сенсорный ввод в единстве, и я забыл приложить код перемещения карты для ввода с помощью мыши с моего сенсорного контроллера. Вскоре удалим этот вопрос, если кто-нибудь будет сбит с толку, почему этот код не работает ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...