如何在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.
相关产品推荐
相关产品推荐

