如何订阅trigger_device中的TriggeredEvent?

问题描述 投票:0回答:1

我希望能够在我的程序看到 CC.TriggeredEvent 后在广告牌设备上显示文本,但是在订阅类型 ?agent->void 时似乎出现问题。有什么解决办法吗?

CC.TriggeredEvent.Subscribe(OnTriggeredEvent)
返回错误:

This function parameter expects a value of type ?agent->void, but this argument is an incompatible value of type type{_(:agent)<suspends>:void}.

代码:


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

# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.

# 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)<suspends>:void=
    MapText.SetText(StringToMessage("Castaway Castles"))
    DifficultyText.SetText(StringToMessage("EASY"))

unreal
1个回答
0
投票

您正在订阅一个具有导致该错误的效果说明符的函数。创建一个使用spawn{}表达式来调用OnTriggerEvent的新函数。例如:

CC.TriggeredEvent.Subscribe(Start_OnTriggeredEvent)

Start_OnTriggeredEvent(a:agent) : void = spawn{OnTriggeredEvent()}

© www.soinside.com 2019 - 2024. All rights reserved.