我之前曾问过这个问题,在进行调试时,我终于在代码中找到了问题,但是我不确定如何解决它。
我创建了一个生成系统,可以使骑自行车的人产生并立即开始向前骑自行车,我有一个脚本可以使每个骑自行车的人向前移动,而另一个脚本可以使骑自行车的人停下来并在另一个玩家或骑自行车的人在前时继续前进,此是有问题的脚本。
快速总结一下,每当一名骑单车的人(a)被一名运动员停下,而另一名骑单车的人(b)被前面的骑单车的人停下时,布尔值会触发将playerInside
和cyclistInside
变成true
。这可以。但是,一旦玩家离开,第一个骑单车的人(a)会将playerInside
设置为false
,这是正确的,但是cyclistInside
仍然设置为true
。这是因为身后的骑自行车的人仍在检测前方的人。因此,似乎每个骑车人的脚本都无法独立运行。
我花了一些时间调试才能在这里真正找到问题,这就是我所发现的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cyclistStoping : MonoBehaviour
{
public VehicleMove cyclistMovement;
public Animator CycleAnims;
// bools
public bool playerInside;
public bool cyclistInside;
private void Start()
{
playerInside = false;
cyclistInside = false;
}
// implement delay
private void Update()
{
if (playerInside == false && cyclistInside == false)
{
StartCoroutine(timeDelay());
}
}
// player or cyclist (INSIDE)
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player" ) {
playerInside = true;
cyclistMovement.vehicleMovement = 0.0f;
}
else if (other.gameObject.tag == "Cyclist")
{
cyclistInside = true;
cyclistMovement.vehicleMovement = 0.0f;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
{
playerInside = false;
}
else if (other.gameObject.tag == "Cyclist")
{
cyclistInside = false;
}
}
IEnumerator timeDelay()
{
// wait before moving off
yield return new WaitForSeconds(2);
if (playerInside == false && cyclistInside == false)
{
cyclistMovement.vehicleMovement = 0.1f;
StopAllCoroutines();
}
}
}
在这一点上,一旦玩家离开骑单车者,第一个骑单车者(以及在后面等待的人)将不会离开,因为他们正在等待第一个骑单车者的移动,由于cyclistInside
被设置为true
,即使前面没有骑自行车的人。
我希望一旦骑手不再在骑自行车者面前,骑自行车者就会下车,其余骑手将排在第四位。