UE4+Rust(動作検証)
※UE4検証バージョン 4.24.3
前置き
ゲーム業界でプログラムをしていると使用される言語は
Mobileですとobjective-c、swift、java、kotlin,
他だとLua,Pythonなどを使用することが多いかと思います。
またハードの開発環境の都合上新しいライブラリや
記法が使えないこともしばしばあります。
何が言いたいかというと
正直ちょっとあきた、、新しいもの触りたい。
なので気分転換がてらUE4とRustを組み合わせた
実装をやってみたいみたいと思います。
Rustとは
速度、並列性、安全性を仕様として保証しているプログラム言語です。
・速度ではC/C++とほぼ同等の処理速度で
・並列処理では安全かつ効率的に扱え、コンパイル時のチェックも優秀です。
・安全性では、意図的に組まない限りは、メモリ破壊を防ぐ仕組みを持っており、
GCを使用せずにリークなしに組むことができます。
(知らんけど)
またビルドシステムも親切で、
プロジェクトの作成、コンパイル、パッケージのDLなど
簡単に構築できます。
方針として
RustはC言語を呼び出すためのFFI(ForeignFunctionInterface)を持っています。
これによりC や C++ 、C# pythonなどとも双方向にやり取りが可能です。
基本方針としてRustにてライブラリを作成し
ライブラリのリンクの方法としては
・静的リンク(*.lib)
・動的リンク 明示的(*.dll)
・動的リンク 暗黙的(*.dll + *.lib)
とありますが、今回は暗黙的動的リンクで進めたいと思います。
Rustライブラリの作成
まずプロジェクトを作成します。
libRustの部分は好きなプロジェクト名前で大丈夫です。
初期のプロジェクト構成は以下のようになります。
実験のために追加でtest.rsファイルも作成しておきます。
・Cargo.toml
ビルドのタイプを動的ライブラリを指定します
あとは実験用のコードを記述します。
最後にビルドをし
出力先にlibファイルとdllファイルが作成されていることを確認します。
C++からRustライブラリの呼び出し実験(Visual Studio 2019)
※確認工程なだけなのでUE4作業場とはこのステップは関係ありません。
リンクの動作確認としてVisualStudioでコンソールアプリの
プロジェクトを作成します。
ライブラリのパスを設定します。
libファイルを設定します。
それから実行ファイルの場所にdllを配置します。
・C++からrustライブラリ関数の呼び出しを記述
・rustライブラリ関数の宣言を記述
・実行結果
とC++からrust呼び出し
rustからrustの動作が確認できます。
UE4からRustライブラリの呼び出し実験
・プラグイン作成
UE4のプロジェクトを作成し
プラグインを作成します。
プラグインのテンプレは「ThirdPartyLibrary」にしておきます。
・rustライブラリ配置
プラグインがフォルダ構成が作成されたら
ThirdPartyの下にlib/x64を作成し
rustライブラリのlibとdllファイルを配置します。
・ビルドのライブラリ設定をする
※余談ですがusing System;
Console.WriteLineで
ビルド時にログが確認できるので、パスなどファイル名の確認ができます。
(1)Rustライブラリの関数を宣言
(2)dllロード
(3)Rustライブラリの関数を呼び出し
・UE4での実行結果
UE4上でのRustライブラリの呼び出し方法は
以上となります。
次回 は今回の環境の長い手順をお手軽にする方法です
参考資料
https://forums.unrealengine.com/unreal-engine/feedback-for-epic/1700405-rust-for-ue