小编use*_*993的帖子

F#中的协同程序

我刚刚使用F#开始使用Unity3D,我注意到协同程序在书籍和教程中被大量使用,作为解决各种问题的巧妙解决方案.我一直试图弄清楚F#是否具有相同的内置结构,或者它是否至少可能以某种方式模仿它们,但我在MSDN上找不到任何东西.我只使用Continuation monad找到了一些使用协同程序实现的文章,但作为一个初学者,这些都是我的头脑.

这是Unity文档中的C#示例,当在游戏循环中重复调用时会导致对象的alpha颜色随着时间的推移逐渐淡化:

IEnumerator Fade() {
    for (float f = 1f; f >= 0; f -= 0.1f) {
        Color c = renderer.material.color;
        c.a = f;
        renderer.material.color = c;
        yield return;
    }
Run Code Online (Sandbox Code Playgroud)

}

所以我只需要声明一个返回IEnumerator的函数,然后在"body"中将控件放在body中的任何地方.我不知道如何在F#中执行此操作,因为我不断收到错误"此表达式应该具有类型IEnumerator但这里有类型单位"."yield"关键字在F#中的行为也似乎不同,因为与C#不同,它不能单独使用,必须在序列表达式中,正如我从文档中所理解的那样.

我错过了什么吗?如何在F#中实现上述功能?


UPDATE

古斯塔沃的解释是正确的.这是一个精确的Unity脚本,你可以将它附加到一个对象上,看它的红色值在10秒的时间范围内减少0.1.

namespace CoroutinesExample
open UnityEngine

type CoroutinesExample() =
    inherit MonoBehaviour()

    member this.Start() =
        // Either of the these two calls will work
        // this.StartCoroutine("Fade") |> ignore
        this.Fade()                       

    member this.Fade() =
       seq { 
           for f in 1.f .. -0.1f .. 0.f do 
               let mutable …
Run Code Online (Sandbox Code Playgroud)

f# coroutine unity-game-engine

4
推荐指数
1
解决办法
2196
查看次数

标签 统计

coroutine ×1

f# ×1

unity-game-engine ×1