Как упомянуто в комментариях, вы должны либо использовать
FixedUpdate или Time.deltaTime .
Соответствующие Time
значения
Time.deltaTime : время, прошедшее с момента последнего отображенияframe
Time.fixedDeltaTime : Интервал реального времени, в котором вызываются физические методы и, например, FixedUpdate
(как сказано по умолчанию 0.02 seconds
или 50
разв секунду)
Поэтому, как только ваше приложение будет работать с частотой кадров > 50
, вы получите большее значение от Time.fixedDeltaTime
(= 0.02
), чем от Time.deltaTime
(например,для 60 кадров в секунду = 0.017
)
Поэтому использование Time.fixedDeltaTime
в методе Update
может привести к получению более значительных значений / движений, чем ожидалось, если скорость очень высокая.В редакторе частота кадров медленнее, чем в сборке, потому что в приложении для сборки вы избавляетесь от всех накладных расходов UnityEditor.
, так что это должно быть лучше (также просто немного if-else
, используявстроенный ?
-оператор для лучшей читаемости)
private void Update()
{
var targetPosition = pointA ? pointOne.position : pointTwo.position;
if (transform.position == targetPosition)
{
// invert pointA
pointA = !pointA;
// also update the targetPosition
targetPosition = pointA ? pointOne.position : pointTwo.position;
}
// move towards the target using Time.deltaTime
transform.position = Vector2.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
// actually you could get rid of this flag as well
// since it always has the same value as pointA
goingRight = pointA;
anim.Play(goingRight ? animRight : animLeft);
}