2016-10-31 1 views
0

У меня ошибка в скрипте или это ошибка, я не знаю. Когда я начинаю игру в первый раз, она идет очень гладко, но после того, как я играю примерно через 20 секунд, игрок начинает двигаться медленнее и медленнее, и в конце он почти не двигается.Как избежать ухудшения отставания/замедления в Unity 2D Runner?

Игра - Бесконечный бегун, когда я умираю, я нажимаю кнопку повтора, а затем он становится медленнее после каждой попытки.

Script

void MovePlayerOnYAxis() 
    { 

     foreach (Touch touch in Input.touches) 
     { 
      Vector3 newPosition = transform.position; 
      newPosition.y += Mathf.Clamp(touch.deltaPosition.y * speed, MIN_SPEED, MAX_SPEED) * Time.fixedDeltaTime; 
      transform.position = newPosition; 

     } 

    } 
+0

Вы инстанцирование объектов для вашего бегуна? Это делается путем объединения объектов, или вы используете 'Instantiate()'? Вы уничтожаете эти объекты после этого, если они созданы? Используйте профилировщик Unity, чтобы определить, что увядает вашу игру, и затем обновите свой вопрос, если найдете что-нибудь интересное. – Serlite

+0

@Serlite Я использую объект-разрушитель, когда объекты идут за экран, который он уничтожает, и после повторной попытки снова загружает сцену игры, и все объекты начинают двигаться с нуля, но движение игроков начинает идти медленнее и медленнее, я хочу сделать мой игрок к моей оси y что-то вроде этого https://www.youtube.com/watch?v=CeW6SCQv--o watch 13: 00-13: 05, в видеообъекте движется по оси х, я хочу переместить их на оси y, я новичок в программировании, поэтому ваша помощь будет очень хорошей, извините за плохой английский –

+0

Если это замедляется по мере продвижения игры, пожалуйста, посмотрите на [Unity Profiler] (https: //docs.unity3d. com/Manual/Profiler.html), чтобы выяснить, от чего возникает проблема производительности. Это действительно полезный инструмент, который вам следует знать. – Serlite

ответ

1

Ваша проблема заключается в следующей строке:

newPosition.y += Mathf.Clamp(touch.deltaPosition.y * speed, MIN_SPEED, MAX_SPEED) * Time.fixedDeltaTime; 

когда вы умножаете touch.deltaPosition * скорость, вы находитесь в наиболее вероятном сценарии, ограничивающей суммарную скорость с каждый кадр, если вы не нажимаете действительно нечасто.

Если вы пытаетесь заставить персонажа двигаться быстрее с каждым касанием, я рекомендую использовать жесткое тело вместо изменения его положения.

Наконец, вы можете упростить ваш код немного, добавив новый Vector3, что-то вроде

foreach (Touch touch in Input.touches) 
    { 
     transform.position = transform.position + new Vector3(0,Mathf.Clamp(touch.deltaPosition.y * speed, MIN_SPEED, MAX_SPEED) * Time.fixedDeltaTime,0); 
    } 
+0

http://gamedev.stackexchange.com/questions/ 132374/unity-2d-runner-input-touches-help-needed –

+0

Здравствуйте, я не хочу, чтобы это ускорялось после каждого касания, я хочу, чтобы он просто двигался вверх и вниз. Что-то вроде этого https://www.youtube. com/watch? v = CeW6SCQv - o ... 13:00 -13: 05, но не ось x, а ось y –

+0

Он по-прежнему не работает, он замедляет и замедляет каждый раз, пожалуйста, помогите –