Unity と Rust ではじめる
このチュートリアルでは、Rust を WebAssembly にコンパイルして Unity で動かします。
WaaS では WebAssembly モジュールをインポートできますが、Rust ファイルを直接インポートしてその場で WebAssembly モジュールにコンパイルすることもでき、今回はこの方法を使用します。
1. Rust ツールチェインをインストールし、wasm32-unknown-unknown
ターゲットを追加します。
rustup target add wasm32-unknown-unknown
2. Unity プロジェクトに WaaS をインストールします。
3. Unity プロジェクト内に main.rs
を作成します:
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) {
a + b
}
4. add()
関数を実行する C# スクリプト Test.cs
を作成します:
using System;
using UnityEngine;
using WaaS.Runtime;
using WaaS.Unity;
public class Test : MonoBehaviour
{
[SerializeField] private ModuleAsset moduleAsset; // imported main.rs
private void Start()
{
// モジュールのロード
var module = moduleAsset.LoadModule();
// インスタンス化
var instance = new Instance(module, new Imports());
// エクスポートされた関数の取得
var function = instance.ExportInstance.Items["add"] as IInvocableFunction;
// ExecutionContext の作成
using var context = new ExecutionContext();
// 呼び出し
var result = CoreBinder.Instance.Invoke<int>(function, 1, 2);
Debug.Log($"Completed: 1 + 2 = {result}"); // Completed: 1 + 2 = 3
}
}
5. Test.cs
を GameObject にアタッチし、Module Asset
に main.rs
をアサインして実行します。
> Completed: 1 + 2 = 3