Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#yield return新的WaitForSeconds正在停止协同程序_C#_Unity3d_Unity5 - Fatal编程技术网

Unity C#yield return新的WaitForSeconds正在停止协同程序

Unity C#yield return新的WaitForSeconds正在停止协同程序,c#,unity3d,unity5,C#,Unity3d,Unity5,我想使用协同程序让玩家在射出一颗新子弹之前稍等片刻,但它永远不会超过产量。这是密码 protected override void Start () { base.Start (); animator = GetComponent<Animator> (); score = GameManager.instance.playerScore; playerLives = GameManager.instance.playerLife; }

我想使用协同程序让玩家在射出一颗新子弹之前稍等片刻,但它永远不会超过产量。这是密码

 protected override void Start () {
     base.Start ();
     animator = GetComponent<Animator> ();
     score = GameManager.instance.playerScore;
     playerLives = GameManager.instance.playerLife;
 }
 void Update(){
     int horizontal = (int)Input.GetAxisRaw("Horizontal");
     AttemptMove (horizontal, 0);
     if (Input.GetKeyDown ("space")) {
         if(canShoot){
         Vector3 shootPosition = transform.position + new Vector3 (0, 0.5f, 0);
         Instantiate (bullet, shootPosition, Quaternion.identity);
         StartCoroutine(Shoot());
         }
     }
 }

 IEnumerator Shoot(){
     Debug.Log("Start");
     canShoot=false;
     yield return new WaitForSeconds (shootingTimeDelay);
     canShoot=true;
     Debug.Log("End");
 }
受保护的覆盖无效开始(){
base.Start();
animator=GetComponent();
score=GameManager.instance.playerScore;
PlayerLifes=GameManager.instance.playerLife;
}
无效更新(){
int horizontal=(int)Input.GetAxisRaw(“horizontal”);
尝试移动(水平,0);
if(Input.GetKeyDown(“空格”)){
如果(可以拍摄){
Vector3 shootPosition=transform.position+新Vector3(0,0.5f,0);
实例化(bullet、shootPosition、四元数.identity);
开始例行程序(Shoot());
}
}
}
IEnumerator Shoot(){
Log(“启动”);
canShoot=假;
返回新WaitForSeconds(shootingTimeDelay);
Canshot=正确;
Debug.Log(“结束”);
}
shootingTimeDelay设置为1.1f。我不会在任何地方破坏我的游戏对象,它可以在我项目的其他脚本中正常工作


它永远不会结束。我不明白有什么不对

我想说的是,不要为这样的事情使用协同程序

试着这样做,看看你是否能得到更好的恢复

private float time = 0;

public float fireTime = 1.1f;

private void Update()
{
  time += Time.deltaTime;

  if(Input.GetKeyDown("space") && time >= fireTime)
  {
    Vector3 shootPosition = transform.position + new Vector3 (0, 0.5f, 0);
    Instantiate (bullet, shootPosition, Quaternion.identity);
    time = 0;
  }
}

我想说的是,不要为这样的事情使用协同程序

试着这样做,看看你是否能得到更好的恢复

private float time = 0;

public float fireTime = 1.1f;

private void Update()
{
  time += Time.deltaTime;

  if(Input.GetKeyDown("space") && time >= fireTime)
  {
    Vector3 shootPosition = transform.position + new Vector3 (0, 0.5f, 0);
    Instantiate (bullet, shootPosition, Quaternion.identity);
    time = 0;
  }
}

好的,我找到了窃听器。我在它的超类中有一个名为stopallcorroutines的方法,但由于某种原因,我直到现在才想到它。将其更改为StopCorroutine(“我的Corroutine的名称”),现在它可以完美地工作:)

好的,我找到了错误。我在它的超类中有一个名为stopallcorroutines的方法,但由于某种原因,我直到现在才想到它。将其更改为StopCorroutine(“我的Corroutine的名称”),现在它可以完美地工作:)

时间。时间刻度
大于
0
?是c神告诉你不要使用Corroutine。在Unity@JerrySwitalski非常感谢你的评论。两年多过去了,但你仍然帮助我解决了一个我一天来一直试图解决的问题。泰<代码>时间。时间刻度大于
0
?是c#神告诉你不要使用协同程序。在Unity@JerrySwitalski非常感谢你的评论。两年多过去了,但你仍然帮助我解决了一个我一天来一直试图解决的问题。泰!这是一个比使用协同程序更好的解决方案,但是我们仍然应该在操作代码中找到问题所在。这个解决方案非常完美。我在接受它之前正在等待,因为我想知道我的代码中的问题在你的代码中必须有一个外部因素。我对你的合作计划做了一个测试,效果很好。我会看一看脚本执行顺序,或者任何其他可能远程涉及的类调用shootingTimeDelay的值是多少?它是公共的吗?如果是的话,编辑器的价值是什么?这是比使用协程更好的解决方案,但我们仍然应该在操作代码中找到问题。这个解决方案工作得非常完美。我在接受它之前正在等待,因为我想知道我的代码中的问题在你的代码中必须有一个外部因素。我对你的合作计划做了一个测试,效果很好。我会看一看脚本执行顺序,或者任何其他可能远程涉及的类调用shootingTimeDelay的值是多少?它是公共的吗?如果是,编辑器的价值是什么?