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的值是多少?它是公共的吗?如果是,编辑器的价值是什么?