Итак, я пытаюсь создать скрипт для «последователя», который начнет следовать за игроком, столкнувшись с ним. Проблема в том, что я хочу, чтобы последователь дождался определенного времени, прежде чем двигаться к игроку после каждого разговора игрока.Проблемы с WaitForSeconds
Это работает, когда игрок сталкивается с ним. Он перемещается к игроку по истечении заданного времени, но когда игрок останавливается и движется снова, последователь палочки с игроком, а не ждет, пока данное время не закончится. Вот сценарий:
void Update() {
//running is a triggered true on colliding with player.
if(running == true){
StopCoroutine(Move());
StartCoroutine(Move());
}
}
IEnumerator Move(){
yield return new WaitForSeconds (0.5f);
Vector2 pos = transform.position;
Vector2 playerpos = player.transform.position;
playerpos.y = pos.y;
transform.position = Vector2.MoveTowards(pos, playerpos, 1f * Time.deltaTime);
}
Есть ли что-то, что я делаю неправильно?
Также есть еще одна проблема, последователь движется быстрее, чем заданная скорость.
Функция для движения игрока.
void Move(float horizontalinput){
Vector3 pos = transform.position;
pos.x += horizontalinput * maxSpeed * Time.deltaTime;
transform.position = pos;
}
Я очень благодарен за помощь.
Если я правильно понимаю, что если игрок перестает двигаться, то последователь будет продолжать следить, пока он не окажется в положении игрока. На этом этапе последователь сталкивается с игроком, снова заставляя Move запускаться еще раз. Но теперь последователь больше не будет сталкиваться с игроком, потому что он должен сначала выйти из игрового коллайдера. Думаю, вам стоит рассмотреть вопрос о том, движется ли игрок, а не проверять, столкнулся ли игрок с последователем. – Saaru
Я просто добавил еще одно условие в инструкции if для проверки того, движется игрок или нет, и это помогло с синхронизацией, но есть еще одна проблема, которая все еще существует, что-то заставляет последователя двигаться быстрее, чем заданная скорость, «1f», и из-за этого последователь прилип к игроку, пока он движется. Я хочу, чтобы последователь следовал за игроком, и когда игрок останавливается, он должен переместиться в позицию игрока. – Stephen
Хм .. это странно. Как вы можете сказать, что он движется быстрее, чем вы ожидаете? Вы уверены, что больше ничего не движет последователь? – Saaru