Unity:ブラウザースクリプトからC#の関数に文字列を渡す
Unityがビルド時に使用しているEmscriptenのヘルパー関数を使い、文字列のポインタを生成して関数に引き渡す必要がある。生成にはブラウザースクリプトの関数内でのみ使用できる _malloc や HEAP8.set などを使用する code:Assets/Plugin/Hello.jslib(js)
var HelloPlugin = {
$funcs: {},
Setup: function (callback) {
funcs.callback = callback;
},
Hello: function() {
const str = "こんにちは";
const encoder = new TextEncoder();
const strBuffer = encoder.encode(str + String.fromCharCode(0));
const strPtr = _malloc(strBuffer.length);
HEAP8.set(strBuffer, strPtr);
if (wasmTable) {
// Unity6 (2023.3)以降の場合
wasmTable.get(funcs.callback)(strPtr);
} else {
// Unity6より前の場合
Runtime.dynCall('vi', funcs.callback, strPtr); }
},
}
autoAddDeps(HelloPlugin, '$funcs');
mergeInto(LibraryManager.library, HelloPlugin);
code:Assets/Plugin/Hello.cs
public class NewBehaviourScript : MonoBehaviour {
static extern IntPtr Init(Action<string> action);
private static extern void Hello();
void Start() {
Hello();
}
static void Callback(string value)
{
UnityEngine.Debug.Log(value);
}
private void Awake()
{
Init(Callback);
}
}