我试图制作一个速度为每2秒交换一次的物体

时间:2014-11-06 19:46:51

标签: unity3d

这是我的代码,我不确定是什么问题



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

3 个答案:

答案 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