0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりアドベントカレンダーAdvent Calendar 2024

Day 9

【Unity6】WebGLでC#のマルチスレッドはまだサポートしてない

Posted at

概要

Unity6でWebGL周りの機能が増えてきました
その中にこんなものがあります

私たちはまた、C と C++ のマルチスレッドもミックスし、ブラウザ内でのネイティブコードのパフォーマンスをさらに向上させる可能性を広げています。

てっきり自分はC#で書いたものも、うまいことC++周りに変換されてマルチスレッドが使えると思ってたけど違った

実験

こんな感じのマルチスレッドをテストするスクリプトを作ってみた

using System.Threading;
using UnityEngine;
using TMPro;

public class ThreadTest : MonoBehaviour
{
    private int _count = 0;
    [SerializeField] private TMP_Text text;
    Thread thread;

    void Start()
    {
        thread = new Thread(() =>
        {
            while (_count < 1000)
            {
                Debug.Log("Thread: " + _count);
                _count++;
                Thread.Sleep(1000);
            }
        });
        thread.Start();
    }

    void Update()
    {
        text.text = "Count: " + _count;
    }

    void OnDestory()
    {
        thread.Abort();
    }
}

エディタやMacビルドだとちゃんとカウントアップしていく

スクリーンショット 2024-12-09 0.00.23.png

Unity6とUnity2022.3.54でWebGLビルドしてみたがカウントアップしない
スクリーンショット 2024-12-09 0.00.41.png

(ビルド時にPlayer SettingsのEnable Native C/C++ Multithreadingをtrueにしている)
スクリーンショット 2024-12-09 0.02.09.png

やはりマルチスレッドは機能しないようだ

よく見るとツールチップにも書いてる
スクリーンショット 2024-12-09 0.03.28.png

有効にすると、ネイティブ Unity C/C++ エンジン コードは WebAssembly/SharedArrayBuffer マルチスレッド (実験的) をターゲットにします。これにより、WebAssembly 言語標準のさらなる進歩が必要となるため、C# コードのマルチスレッドは有効になりません。このオプションを有効にすると、WebAssembly 2023 のサポートが含まれます。(推奨: 無効。この機能は、将来の Web 機能の評価に関心のある上級ユーザー向けに提供されています)

なるほど。

SharedArrayBufferとは、スレッド間で値を共有するための機能らしい

いつかC#のマルチスレッドが対応されることを祈ります

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?