Я работаю над игрой, и у меня есть мой игрок с тегом "Игрок".У меня есть система порождения велосипедистов, и у каждого велосипедиста есть тег "велосипедист", все они являются префабами.У меня есть сценарий для сборного велосипедиста, который заставляет его двигаться вперед, поэтому каждый раз, когда он появляется, он мгновенно начинает двигаться в фиксированном направлении.
Я хочу, чтобы велосипедисты могли обнаружить 2 вещи: одно, если игрок перед ним, и другое, если перед ним другой велосипедист.Если так, я хочу, чтобы велосипедист остановил велосипедиста.У меня есть скрипт с именем cyclistStoping.cs, который я использую для этого.Сценарий был помещен в префаб велосипедиста для создания нескольких экземпляров.
Ошибка
Я заметил, что иногда даже один раз велосипедист (a) больше не находится перед другим велосипедистом(b), велосипедист (b) все еще останется неподвижным, и он снова уйдет, только если игрок идет впереди него, а затем снова уходит.Я чувствую, что мой код просто глючит и был бы признателен за некоторую помощь в этом.
Я пытался сделать 2 простые проверки внутри каждой функции триггера, но некоторые велосипедисты все еще остаются бездействующими, когда велосипедист больше не находится вперед ними.
Я также пытался использовать функцию задержки, поэтому, когда велосипедист или игрок больше не находятся в зоне действия, велосипедист не уходит, пока не пройдет 2-3 секунды.Однако при этом велосипедист больше не уходит.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cyclistStoping : MonoBehaviour
{
public VehicleMove cyclistMovement;
public bool playerInside = false;
public bool cyclistInside = false;
private bool timePassed = false;
void Start()
{
}
void Update()
{
}
// implement delay
// player or cyclist (INSIDE)
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player" ) {
playerInside = true;
cyclistInside = false;
}
else if (other.gameObject.tag == "Cyclist")
{
playerInside = false;
cyclistInside = true;
}
if (playerInside == true || cyclistInside == true) {
Debug.Log("Player inside: " + playerInside);
cyclistMovement.vehicleMovement = 0.0f;
}
}
// player or cyclist (EXIT)
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
{
playerInside = false;
cyclistInside = false;
}
else if (other.gameObject.tag == "Cyclist")
{
playerInside = false;
cyclistInside = false;
}
if (playerInside == false || cyclistInside == false)
{
if (timePassed == true) {
Debug.Log("Player inside: " + playerInside);
cyclistMovement.vehicleMovement = 0.1f;
// delay, then move off
timePassed = false;
}
}
}
IEnumerator timeDelay()
{
// wait before moving off
yield return new WaitForSeconds(3);
timePassed = true;
}
}
Я ожидаю, что велосипедист остановится, если игрок впереди него, и как только появится следующий велосипедист, я ожидаю, что ТО остановит велосипедистакак только он обнаруживает первого велосипедиста.Как только игрок отходит от первого велосипедиста, он должен пройти 2 секунды, прежде чем уйти, и второй велосипедист сделает то же самое.