这是我的代码,我不确定是什么问题
using UnityEngine;
using System.Collections;
public class vswap : MonoBehaviour {
void Update() {
if (1=1){
yield return new WaitForSeconds(2);
rigidbody.velocity = new Vector3(0, 0+this.transform.position.y, 0);
Debug.Log("velocity swap");
}
}
}

这是错误:
Assets / vswap.cs(4,14):错误CS1624:vswap.Update()' cannot be an iterator block because
的主体无效'不是迭代器接口类型
It used to have while instead of if but that did not fix it
I also tried to use IEnumerator instead of void but that did not work
答案 0 :(得分:0)
问题是您已将Coroutine的代码放在Update方法中。 所以“yeild”关键字不起作用。 此外,“if(1 = 1){”这一行总是正确的 - 这是你以后可能遇到的错误。
在UnityPatterns.com上查看此tutorial on using corroutines
它是你想要的。
答案 1 :(得分:0)
整形医生是正确的。我只是觉得我会帮助你一点并提供一些应该有效的代码,但也要考虑到它是完全未经测试的。
private void Start()
{
velocity = valueOne;
StartCoroutine(Velocity);
}
public IEnumerator Velocity()
{
yield return new WaitForSeconds(2);
velocity = velocity == valueOne ? valueTwo: valueOne;
}
沿着这些方向尝试一些东西,就像我说我没有测试任何这些,并且可能有更好的方法来做到这一点。但是如果你要使用它们,一定要查看关于协同程序的教程,总是很好地理解正在发生的事情。
答案 2 :(得分:0)
首先,你不需要“if(1 = 1)”,因为它总是如此。
现在,您可以这样做(使用和更新Repareman中的代码):
using UnityEngine;
using System.Collections;
public class vswap : MonoBehaviour {
private int velocity =2;
private int speed1=2;
private int speed2=4;
private void Start()
{
Speed ();
}
public IEnumerator Speed()
{
yield return new WaitForSeconds(2);
velocity = velocity == speed1 ? speed2: speed2;
Speed();
}
}
现在只需改变新谷的rigibody速度即可:D