メインコンテンツまでスキップ

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 Assetmain.rs をアサインして実行します。

> Completed: 1 + 2 = 3