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

チュートリアル

このチュートリアルでは、ログを出力するだけの簡単なスクリプトを作成し、シーン上のコンポーネントから実行します。事前に 導入 を済ませてください。

スクリプトを作成する​

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 は、スクリプトとエントリポイント、引数の値をまとめて保持します。

引数を設定して実行する​

  1. シーン上の GameObject に HelloEvent を追加します。
  2. インスペクタの Entry の Script に hello.rs を指定します。
  3. エントリポイントの一覧から hello を選択します。エントリポイントの引数に合わせて、name と count の入力欄が表示されます。
  4. name と count に値を入力し、Play モードに入ります。

コンソールに 1 秒ごとにログが出力されれば成功です。

次のステップ​

  • スクリプトで使える機能は スクリプトの記述 を参照してください。
  • C# からの実行の方法の詳細は スクリプトの実行 を参照してください。
  • ダイアログを表示したり、ゲーム固有の機能をスクリプトから呼び出したりするには、ホスト側の実装が必要です。機能の追加 を参照してください。