ncsoft / Unreal.js

Unreal.js: Javascript runtime built for UnrealEngine
Other
3.69k stars 351 forks source link

How to bind UMG Widget to JS? #342

Open Yimi81 opened 8 months ago

Yimi81 commented 8 months ago
class MyTestWidget extends WidgetBlueprint.Load('/Game/Test/MyWidget').GeneratedClass{

    // Override an event which was declared in Blueprint
    Test() {
        console.log("Press Button From Javascript")
    }
}

Like this https://github.com/ncsoft/Unreal.js/wiki/Override-Blueprint-Function, I want js inherits the widgets created in the blueprint and can then rewrite the methods inside, but I am unable to establish a connection between the two. The above method seems to be incorrect

Yimi81 commented 8 months ago

More Detail : https://github.com/ncsoft/Unreal.js/issues/340#issuecomment-1983008707

Yimi81 commented 8 months ago

The correct code, SendButton is the corresponding button name in UMG

/// <reference path="typings/ue.d.ts">/>

function GetPC() {
    return PlayerController.C(GWorld.GetAllActorsOfClass(PlayerController).OutActors[0])
}

function Test() {
    console.log("Press Button From Javascript")
}

function main()
{
    let PC = GetPC()

    let TestWidget = WidgetBlueprint.Load('/Game/Test/WBP_Test').GeneratedClass
    let widget = GWorld.CreateWidget(TestWidget, PC)
    widget.AddToViewport()
    
    widget.SendButton.OnClicked.Add(Test)
}

try
{
    module.exports = () =>
    {
        let cleanup = null;
        
        process.nextTick(() => cleanup = main());

        return () => cleanup();
    }
}catch(e)
{
    require('bootstrap')('test')
}