Giter Club home page Giter Club logo

unreal.js's Introduction

Unreal.js

Unreal.js is a plug-in which brings V8-powered Javascript into UnrealEngine4.

Features

  • 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 (auto-generated *.d.ts)

  • Dedicated Javascript console on UnrealEditor

  • (Full) access to existing javascript libraries via npm, bower, ...

Install

  • Install git-lfs first to download *.umap, *.uasset properly. (https://git-lfs.github.com/)
  • Download prebuilt V8 and unzip into Engine/Plugins/UnrealJS. (files are located in releases)
  • Open Examples/JavascriptPlayground.uproject

License

Apache2

Examples

Unreal 2048

Create a new actor

let myActor = new Actor(GWorld,{X:10,Y:20,Z:30});
myActor.SetActorLocation({X:40,Y:80,Z:120});

Subclass an existing class

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);
}

Node.js like

let _ = require('lodash');
let kick = () => {
  console.log("Hello timer!",_.keys(this));
  setTimeout(kick,1000);
};
kick();

GameUI-dev like web-dev

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}}

Write your own extension

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}`)

Direct access to raw memory

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();
}

unreal.js's People

Contributors

nakosung avatar crocuis avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.