You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在trigger_device中订阅TriggeredEvent?类型不兼容问题求解

解决Verse中TriggeredEvent订阅的类型兼容问题

错误原因

CC.TriggeredEvent.Subscribe要求的回调函数类型为?agent->void,但你定义的OnTriggeredEvent带有<suspends>修饰符,属于挂起函数,二者类型不兼容,导致报错。此外原代码中OnTriggeredEvent定义在类外部,无法访问类的成员变量,会引发额外问题。

解决方案

做两处关键修改:

  • 移除OnTriggeredEvent的<suspends>修饰符(你的回调逻辑里没有Sleep、Await这类需要挂起的操作)
  • 将OnTriggeredEvent移入MapLoader类内部,确保能访问类成员变量

修正后的完整代码

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

# A Verse-authored creative device that can be placed in a level
MapLoader := class(creative_device):

    @editable
    CC:trigger_device = trigger_device{}

    @editable
    MapText:billboard_device = billboard_device{}

    @editable
    DifficultyText:billboard_device = billboard_device{}

    var initseconds : int = 0

    @editable
    StartTimer:billboard_device = billboard_device{}

    @editable
    RNG:rng_device = rng_device{}

    @editable
    InitTimerInit:trigger_device = trigger_device{}

    StringToMessage<localizes>(value:string)<computes> : message = "{value}"

    OnBegin<override>()<suspends>:void=
        Print("Script started")

        MapText.SetText(StringToMessage("Waiting for player(s).."))
        DifficultyText.SetText(StringToMessage(" "))
        StartTimer.SetText(StringToMessage("{initseconds}s"))
        Print("Defaults set")
        

        InitTimerInit.TriggeredEvent.Await()
        Print("I saw a TriggeredEvent")
        set initseconds = 10
        Print("initseconds set")
        loop:
            if (initseconds > 0):
                set initseconds = initseconds - 1
                Sleep(1.0)
                StartTimer.SetText(StringToMessage("{initseconds}s"))
                Print("{initseconds}")
            else:
                StartTimer.SetText(StringToMessage("{initseconds}s"))
                Print("Done")
                RNG.Activate()
                CC.TriggeredEvent.Subscribe(OnTriggeredEvent)
                break

    OnTriggeredEvent<private>(Agent:agent):void=
        MapText.SetText(StringToMessage("Castaway Castles"))
        DifficultyText.SetText(StringToMessage("EASY"))

内容的提问来源于stack exchange,提问作者Brave.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:20:12