Unreal.js is a plug-in which brings V8-powered Javascript into UnrealEngine4.
-
Powered by latest V8 (ES6)
-
CommonJS modules
-
Full access to the whole UnrealEngine API
-
Free to subclass existing classes including blueprint
-
Web-dev like UMG (Jade, pseudo-css, pseudo-angular.js)
-
Live reload
-
Communicate with outer world: REST, process(pipe), arraybuffer, ...
-
Bridge API for editor extension
-
Auto-completion for Visual Studio Code (auto-generated *.d.ts)
-
Dedicated Javascript console on UnrealEditor
-
(Full) access to existing javascript libraries via npm, bower, ...
- Make sure you have UnrealEngine 4.10 canonical build.
- Install git-lfs first to download *.umap, *.uasset properly. (https://git-lfs.github.com/)
- After installing
git-lfs
,git clone https://github.com/ncsoft/Unreal.js
- Download prebuilt UnrealJS plugin and unzip into
Examples/Plugins/UnrealJS
. cd Examples/Content/Scripts && npm i
to install node.js packages which are required to run examples.- Open
Examples/JavascriptPlayground.uproject
- Activate
JavascriptConsole
by clickingWindows - Developer Tools - JavascriptConsole
.
- Download prebuilt V8 and unzip into .../Plugins/UnrealJS. (files are located in releases)
Apache2
let myActor = new Actor(GWorld,{X:10,Y:20,Z:30});
myActor.SetActorLocation({X:40,Y:80,Z:120});
class MyActor extends Actor {
properties() {
this.MyProp/*EditAnywhere+Replicated+int*/;
}
RPC(x/*int*/) /*Server+Reliable*/ {
console.log('This function is replicated',this.MyProp++);
}
}
let MyActor_C = require('uclass')()(global,MyActor);
if (GWorld.IsServer()) {
new MyActor_C(GWorld);
}
let _ = require('lodash');
let kick = () => {
console.log("Hello timer!",_.keys(this));
setTimeout(kick,1000);
};
kick();
div
span.full
Button.full
text {{text}}
div.full
Button.full(fn.on-clicked="inc()")
text {{count}}
Button.full(fn.on-clicked="add()")
text Click button above!
span
text.yellow >
EditableText(Binding.Text='text',
fn.on-text-changed='text = ^arguments[0]',
HintText="Your secret goes here")
list.full(repeat='item in items',on-click="discard(item)")
HorizontalBox.small
text.full {{item.key}}
text.full {{item.value}}
Just add some static function into your UBlueprintFunctionLibrary
.
UCLASS()
class UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY();
public:
UFUNCTION(BlueprintCallable, Category = "Scripting | Javascript")
static bool MySuperFunction(UMySuperActor* SuperActor, FString SuperPath, FVector* OutVector);
};
let result = MySuperActor.MySuperFunction("SuperPath")
console.log(`return value:${result.$} vector:${result.OutVector}`)
let ab = new ArrayBuffer(32*1024); // 32K bytes buffer
let u8 = new Uint8Array(ab); // typed array
memory.bind(ab);
GWorld.MySuperMemoryFunction();
memory.unbind(ab);
void UMyBlueprintFunctionLibrary::MySuperMemoryFunction(UWorld* World)
{
auto size = FArrayBufferAccessor::GetSize();
auto buffer = FArrayBufferAccessor::GetData();
}