这个部分的代码有错误https://dev.epicgames.com/documentation/zh-cn/fortnite/lights-and-bridges-02-puzzle-component-in-fortnite#finalcodeforpuzzleverse

关于场景图的教程,在这一部分的链接中,有错误。不和官方能否修改一下?

using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/SceneGraph }
using { Logging }

puzzle_solved_event := class(scene_event){}

Scene Graph component handling puzzle component triggered events and when the puzzle is solved.

puzzle_component := class<final_super>(component):

# Is this puzzle component solved
var<private> Solved<public>:logic = false

# Map of puzzle pieces and whether they have been "solved"
var<private> TriggerableEntities<private>:[]entity = array{}

# Disable puzzle pieces triggering once puzzle is solved
@editable
DisablePuzzleTriggerablesWhenSolved<private>:logic = false

# Initialize array of triggerable entities
InitializeTriggereableDescendantEntities<private>()<transacts>:void=
    for:
        DescendantEntity : Entity.FindDescendantEntities(entity))
        DescendantEntityComponent : DescendantEntity.GetComponents()
        CastToTriggerable := triggerable[DescendantEntityComponent]
        CastToTriggerable.PuzzlePiece?
    do:
        set TriggerableEntities += array{DescendantEntity}

# Decides whether puzzle is solved
IsPuzzleSolved<private>()<decides><transacts>:void=
    for:
        TriggerableEntity : TriggerableEntities
        TriggerableEntityComponent : TriggerableEntity.GetComponents()
        CastToTriggerable := triggerable[TriggerableEntityComponent]
        CastToTriggerable.PuzzlePiece?
    do:
        CastToTriggerable.InSolvedState[]

# Clean up or subsequent events after puzzle is solved
HandlePuzzleSolved<private>():void=
    set Solved = true
    Log("Puzzle Solved!", LogPuzzleComponent, ?Level:=log_level.Normal)
    if (DisablePuzzleTriggerablesWhenSolved?):
        DisableTriggerableComponents()
    Log("Sending down solved event", LogPuzzleComponent, ?Level:=log_level.Normal)
    Entity.SendDown(puzzle_solved_event{})

# Async wrapper for determining whether puzzle is solved
CheckPuzzleSolved()<suspends>:void=
    Sleep(0.25)
    if (not Solved?, IsPuzzleSolved[]):
        HandlePuzzleSolved()

# Disable puzzle pieces
DisableTriggerableComponents<private>():void=
    for:
        DescendantEntity : Entity.FindDescendantEntities(entity)
        DescendantEntityComponent : DescendantEntity.GetComponents()
        CastToTriggerable := triggerable[DescendantEntityComponent]
        CastToTriggerable.PuzzlePiece?
        CastToEnableable := enableable[DescendantEntityComponent]
    do:
        CastToEnableable.Disable()

# Handle triggered events sent up from child entities
OnReceive<override>(SceneEvent:scene_event):logic=
    Log("Received scene event.", LogPuzzleComponent, ?Level:=log_level.Normal)
    if (TriggeredEvent := triggered_event[SceneEvent], TriggeredEntity := TriggeredEvent.TriggeredEntity?):
        spawn{CheckPuzzleSolved()}
        true
    false

# Runs when the component should start simulating in a running game.
OnBeginSimulation<override>():void =
    # Run OnBeginSimulation from the parent class before
    # running this component's OnBeginSimulation logic
    (super:)OnBeginSimulation()
    InitializeTriggereableDescendantEntities()