Unreal.hx is a plugin for Unreal Engine 4 that allows you to write code in the Haxe programming language. Haxe is a modern, high-level, type-safe programming language that offers high performance critical for game development.
UCLASS
creation, subclassing, and Blueprints.haxe
installation, and have the hxcpp
and hxcs
haxelibs installedPlugins/UnrealHx
directoryBuild.cs
file to extend HaxeModuleRules
instead of ModuleRules
Haxe
, will be created at the root of your project. Add any class to be compiled to Haxe/Static
or Haxe/Scripts
, and you may add new compiler arguments to the arguments.hxml
filehaxe gen-build-script.hxml
inside the Haxe
directory to compile the Scripts without having to do a full C++ build (see our wiki)package mygame;
import unreal.*;
@:uclass
class AMyActor extends AActor {
// make a property that is editable in the editor.
@:uproperty(EditDefaultsOnly, Category=Inventory)
var items:TArray<AActor>;
// make a function that is callable from C++/Blueprints
@:ufunction(BlueprintCallable, Category=Inventory)
public function addToInventory(item:AActor) {
items.push(item);
}
// override native C++ function
override function Tick(deltaTime:Float32) : Void {
super.Tick(deltaTime); // call super functions
trace('Hello, World!'); // all traces are redirected to Unreal's Log
trace('Warning', 'Some Warning'); // and it supports Warning, Error and Fatal as well
}
// tell Unreal to call our Tick function
public function new(wrapped) {
super(wrapped);
this.PrimaryActorTick.bCanEverTick = true;
}
}
package mygame;
import unreal.*;
@:uclass
class AMyGameMode extends AGameMode {
@:uproperty(BlueprintReadWrite)
public var playerName:FString;
@:ufunction(BlueprintCallable)
public function makeExternalRequest(data:String) {
// use Unreal C++ API to make an HTTP Request
var httpRequest = FHttpModule.Get().CreateRequest();
httpRequest.SetVerb("GET");
httpRequest.SetHeader("Content-Type", "application/json");
httpRequest.SetURL("www.mygame.com/players");
// use Haxe JSON library to encode data.
var json = {
name: this.playerName,
playerData: data,
};
httpRequest.SetContentAsString(haxe.Json.stringify(json));
// Receive a callback when the response is received.
httpRequest.OnProcessRequestComplete.BindLambda(function (request, response, success) {
trace('response received: ${response.GetContentAsString()}');
});
httpRequest.ProcessRequest();
}
}
For a complete example project, check out https://github.com/waneck/HaxePlatformerGame , which is a port of Unreal's Platformer Game demo to Haxe 3.3/Unreal 4.11
More information is available on the Wiki