c# - “OnCollisionEnter()”中的协程 (WaitForSeconds()) 给出编译错误
问题描述
我正在尝试制作一个平台游戏,我想在 x 秒后禁用平台的重力。但它给出了一个无法使用的编译错误,因为它void
不是内部接口类型。
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Platform(Clone)")
{
numberOfJumps = 2;
Debug.Log("Platform hit");
}
// Make platforms fall
yield return new WaitForSeconds(2f);
collision.rigidbody.useGravity = enabled;
yield return null;
}
解决方案
您只能在coroutine
函数中屈服。你不能从一个void
函数。一些 Unity 回调函数,如Start
函数,可以做成void
协程函数。幸运的是,该OnCollisionEnter
功能就是其中之一,因此只需 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;
}
推荐阅读
- javascript - JavaScript“str.replace()”不工作/返回错误
- function - 在 Delphi 中,如何从 asm 语句中调用私有属性读取函数
- python - 如何在 Python 中创建填充事件之间时间的行
- java - 尝试更新 CompletableFuture 变量但出现错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终
- r - 将多列放置到两列并删除 R 中的重复项
- spring - Spring 应用程序单事件和多个侦听器
- python - 你如何合并不同形状的熊猫数据框?
- sql - SQL 语句从右表的多行中获取单个值作为输出中的列
- c# - C#9 中 && 和 and 有什么区别?
- forth - Forth 中的 memset 等价物是什么?