C# “OnCollisionCenter()中的协程(WaitForSeconds())给出编译错误
我想做一个平板游戏,我想在x秒后降低平台的重力。但它给出了一个complile错误,即它不能使用,因为void不是内部接口类型。我是一个乞丐,我迫不及待地想继续我的项目。谢谢你的时间,我为我糟糕的英语感到抱歉C# “OnCollisionCenter()中的协程(WaitForSeconds())给出编译错误,c#,unity3d,C#,Unity3d,我想做一个平板游戏,我想在x秒后降低平台的重力。但它给出了一个complile错误,即它不能使用,因为void不是内部接口类型。我是一个乞丐,我迫不及待地想继续我的项目。谢谢你的时间,我为我糟糕的英语感到抱歉 private void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Platform(Clone)") { numberOfJumps = 2;
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
//Maake platforms fall
yield return new WaitForSeconds(2f);
collision.rigidbody.useGravity = enabled;
yield return null;
}
您应该创建一个协同程序,然后在OnCollisionCenter内部调用它。Void意味着该方法没有返回类型,这就是为什么会出现编译错误
IENumerator Fall(Rigidbody rigidbody)
{
//Make platforms fall
yield return new WaitForSeconds(2f);
rigidbody.useGravity = enabled;
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
StartCoroutine(Fall(collision.rigidbody));
}
您应该创建一个协同程序,然后在OnCollisionCenter内部调用它。Void意味着该方法没有返回类型,这就是为什么会出现编译错误
IENumerator Fall(Rigidbody rigidbody)
{
//Make platforms fall
yield return new WaitForSeconds(2f);
rigidbody.useGravity = enabled;
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
StartCoroutine(Fall(collision.rigidbody));
}
您只能在协程函数中让步。不能从一个空函数中删除。一些Unity回调函数(如Start函数)可以设置为void或coroutine函数。幸运的是,OnCollisionCenter函数就是其中之一,因此只需将void更改为IEnumerator即可。这将在不需要手动启动新的协同程序功能的情况下工作。当发生冲突时,Unity将自动调用并启动它作为协同程序
private IEnumerator OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
//Maake platforms fall
yield return new WaitForSeconds(2f);
collision.rigidbody.useGravity = enabled;
yield return null;
}
您只能在协程函数中让步。不能从一个空函数中删除。一些Unity回调函数(如Start函数)可以设置为void或coroutine函数。幸运的是,OnCollisionCenter函数就是其中之一,因此只需将void更改为IEnumerator即可。这将在不需要手动启动新的协同程序功能的情况下工作。当发生冲突时,Unity将自动调用并启动它作为协同程序
private IEnumerator OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
//Maake platforms fall
yield return new WaitForSeconds(2f);
collision.rigidbody.useGravity = enabled;
yield return null;
}
您的函数没有返回值,因此返回新的WaitForSeconds2f;他错了。。你的英语很好,你的函数没有返回值,因此返回新的WaitForSeconds2f;他错了。。如果你的问题解决了,别忘了回答。如果你的问题解决了,别忘了回答。