要做的效果是玩家捡起buff后向场景中生成的敌人发射炮弹。
发现是这一段代码的问题,因为删了这段就能进去了,请问是哪里有问题哇,怎么改?orz卡了两三天了,网上看到类似的问题,回复是有死循环,但我找不到
public hasMisstle;
private void OnTriggerEnter(Collider other)
{
if(other.CompareTag("Buff"))
{ Destroy(other.gameObject);
StartCoroutine(MisstleTimer());
StartCoroutine(GenerateMisstles()); }
}
//5秒后关闭buff
IEnumerator MisstleTimer()
{ hasMisstle = true;
yield return new WaitForSeconds(5);
hasMisstle = false; }
//对于每个敌人,每1.5秒生成一枚导弹追踪,三秒后销毁
IEnumerator GenerateMisstles()
{
while (hasMisstle)
{
foreach (GameObject enemy in GameObject.FindGameObjectsWithTag("Enermy"))
{ GameObject rocket= Instantiate(misstle, transform.position + new Vector3(0, 2, 0), misstle.transform.rotation);
StartCoroutine(DestroyRocket(rocket));
StartCoroutine(Homing(enemy,rocket)); }
yield return new WaitForSeconds(1.5f);
} }
IEnumerator Homing(GameObject enemy,GameObject rocket)
{ while(rocket&& enemy)
{ Vector3 dir = enemy.transform.position - rocket.transform.position;
rocket.GetComponent<Rigidbody>().AddForce(dir.normalized * 30,ForceMode.VelocityChange); }
yield return null; }
IEnumerator DestroyRocket(GameObject rocket) { yield return new WaitForSeconds(3); if (rocket) { Destroy(rocket.gameObject); } }>
【以下回答由 GPT 生成】
我很抱歉,但你没有提供具体的问题,因此我无法提供解决方案。请提供一个具体的问题,我将尽力解决它。
StartCoroutine是同步执行的,应该是卡在Homing里的while了,一直出不去,协程没有返回,一直没被销毁;应该在while里return一段时间