UE4+Rust(動作検証)

UE4検証バージョン  4.24.3

 

前置き

ゲーム業界でプログラムをしていると使用される言語は

大抵C++C#だったり

Mobileですとobjective-c、swift、java、kotlin,

他だとLua,Pythonなどを使用することが多いかと思います。

またハードの開発環境の都合上新しいライブラリや

記法が使えないこともしばしばあります。

 

何が言いたいかというと

正直ちょっとあきた、、新しいもの触りたい。

なので気分転換がてらUE4とRustを組み合わせた

実装をやってみたいみたいと思います。

 

 

Rustとは

速度、並列性、安全性を仕様として保証しているプログラム言語です。

・速度ではC/C++とほぼ同等の処理速度で

・並列処理では安全かつ効率的に扱え、コンパイル時のチェックも優秀です。

・安全性では、意図的に組まない限りは、メモリ破壊を防ぐ仕組みを持っており、

    GCを使用せずにリークなしに組むことができます。

(知らんけど)

 

またビルドシステムも親切で、

プロジェクトの作成、コンパイル、パッケージのDLなど

簡単に構築できます。

 

方針として

RustはC言語を呼び出すためのFFI(ForeignFunctionInterface)を持っています。

これによりC や C++C# pythonなどとも双方向にやり取りが可能です。

基本方針としてRustにてライブラリを作成し

それをUE4でのC++から呼び出す形となります。

ライブラリのリンクの方法としては

・静的リンク(*.lib)

・動的リンク 明示的(*.dll)  

・動的リンク 暗黙的(*.dll + *.lib)

とありますが、今回は暗黙的動的リンクで進めたいと思います。

 

Rustライブラリの作成

まずプロジェクトを作成します。

f:id:CrabPunch:20200726154156p:plain

 libRustの部分は好きなプロジェクト名前で大丈夫です。

初期のプロジェクト構成は以下のようになります。

実験のために追加でtest.rsファイルも作成しておきます。

f:id:CrabPunch:20200726154417p:plain

 ・Cargo.toml

ビルドのタイプを動的ライブラリを指定します

f:id:CrabPunch:20200726154836p:plain

 

あとは実験用のコードを記述します。

f:id:CrabPunch:20200726155202p:plain

f:id:CrabPunch:20200726155210p:plain

 

最後にビルドをし

出力先にlibファイルとdllファイルが作成されていることを確認します。

f:id:CrabPunch:20200726155549p:plain

f:id:CrabPunch:20200726155557p:plain

 

 

C++からRustライブラリの呼び出し実験(Visual Studio 2019)

※確認工程なだけなのでUE4作業場とはこのステップは関係ありません。

 リンクの動作確認としてVisualStudioでコンソールアプリの

プロジェクトを作成します。

f:id:CrabPunch:20200726161627p:plain

 

ライブラリのパスを設定します。

f:id:CrabPunch:20200726161208p:plain

libファイルを設定します。

f:id:CrabPunch:20200726161410p:plain

それから実行ファイルの場所にdllを配置します。

 

C++からrustライブラリ関数の呼び出しを記述 

f:id:CrabPunch:20200726161745p:plain

 

・rustライブラリ関数の宣言を記述 

f:id:CrabPunch:20200726161853p:plain

 

・実行結果

f:id:CrabPunch:20200726162052p:plain

C++からrust呼び出し

rustからrustの動作が確認できます。

 

UE4からRustライブラリの呼び出し実験

プラグイン作成

 UE4のプロジェクトを作成し

プラグインを作成します。

プラグインのテンプレは「ThirdPartyLibrary」にしておきます。

f:id:CrabPunch:20200726163047p:plain

f:id:CrabPunch:20200726163059p:plain

 

f:id:CrabPunch:20200726163118p:plain

 

 

・rustライブラリ配置

プラグインがフォルダ構成が作成されたら

ThirdPartyの下にlib/x64を作成し

rustライブラリのlibとdllファイルを配置します。

 

f:id:CrabPunch:20200726164145p:plain

 

・ビルドのライブラリ設定をする

f:id:CrabPunch:20200726164628p:plain

 ※余談ですがusing System;

Console.WriteLineで

ビルド時にログが確認できるので、パスなどファイル名の確認ができます。

 

プラグインC++部分でRustライブラリの関数を呼び出す

(1)Rustライブラリの関数を宣言

(2)dllロード

(3)Rustライブラリの関数を呼び出し

f:id:CrabPunch:20200726165820p:plain

UE4での実行結果

f:id:CrabPunch:20200726170013p:plain

 

UE4上でのRustライブラリの呼び出し方法は

以上となります。

 

次回 は今回の環境の長い手順をお手軽にする方法です

crabpunch.hatenablog.com

 

 

参考資料

https://forums.unrealengine.com/unreal-engine/feedback-for-epic/1700405-rust-for-ue