チュートリアル
このチュートリアルでは、ログを出力するだけの簡単なスクリプトを作成し、シーン上のコンポーネントから実行します。事前に 導入 を済ませてください。
スクリプトを作成する
Assets 以下に hello.rs を作成し、次の内容を記述します。
hello.rs
use wukuro::entry;
use wukuro::functions::*;
use wukuro::types::Context;
#[entry]
fn hello(cx: &Context, name: String, count: i32) {
for i in 0..count {
log(&format!("Hello, {name}! ({i})"));
delay(1.0, UpdateModeKind::Scaled);
}
}
#[entry]を付けた関数helloがエントリポイントになります。- 第 1 引数の
&Contextは、スクリプトの実行の情報です。引数や変数の取得、モジュールの取得に用います。 nameとcountは、インスペクタから値を設定する引数です。logとdelayはwukuro:coreが提供する関数です。
インポート設定で、Dependencies に wukuro と wit-bindgen を追加し、Componentize を有効にし、WIT Directory を空にして Apply します。Wukuro のスクリプトの WIT は #[entry] が埋め込むため、WIT Directory は空にする必要があります(コンポーネント化)。インポートが成功すると、スクリプトはコンポーネントのアセット(ComponentAsset)になります。
スクリプトを実行するコンポーネントを作成する
次の C# スクリプトを作成します。
HelloEvent.cs
using Cysharp.Threading.Tasks;
using UnityEngine;
using Wukuro;
public class HelloEvent : MonoBehaviour
{
[SerializeField] private WukuroEntryReference entry = new();
// スクリプトの変数の保存先
private readonly MemoryVariables variables = new();
private void Start()
{
PlayAsync().Forget();
}
private async UniTask PlayAsync()
{
var runner = new WukuroRunner();
await runner.RunAsync(entry, variables);
}
}
WukuroEntryReference は、スクリプトとエントリポイント、引数の値をまとめて保持します。
引数を設定して実行する
- シーン上の GameObject に
HelloEventを追加します。 - インスペクタの Entry の Script に
hello.rsを指定します。 - エントリポイントの一覧から
helloを選択します。エントリポイントの引数に合わせて、nameとcountの入力欄が表示されます。 nameとcountに値を入力し、Play モードに入ります。
コンソールに 1 秒ごとにログが出力されれば成功です。