Проблема, вероятно, в строке
transform.position = Vector2.MoveTowards(playerPos, target, speed);
Вы никогда не обновите значение playerPos
, поэтому MoveTowards
Перемещение точки current
в направлении target
.
каждый кадр возвращает одно и то же значение, поскольку вы говорите ему всегда начинать с одной и той же позиции, а также использовать фиксированное вычисленное расстояние.
Такжеумножение на Time.deltaTime
должно выполняться для каждого кадра, так что вы фактически используете правильное значение для каждого кадра, а не вычисляете его только со значением самого первого кадра.
Обратите внимание, что Vector3
и Vector2
не class
, но struct
и, следовательно, значение тип и НЕ a эталонный тип,Кажется, вы ожидали, что они будут ссылочными типами, поэтому pos
и playerPos
будут обновлены, если вы измените transform.position
, но это не случай!
Вы бы предпочлихочу изменить его на
float speed = castDistance / hookshotCastTime;
...
transform.position = Vector2.MoveTowards(transform.position, target, speed * Time.deltaTime);
И то же самое во второй программе. Особенно условие цикла здесь никогда не вернется, поскольку pos
никогда не обновляется! Поэтому измените его на
while (Vector2.Distance(transform.position, playerPos) > hookshotDistanceBuffer)
{
transform.position = Vector2.MoveTowards(transform.position, playerPos, hookshotReturnSpeed * Time.deltaTime);