Как дать методу возможность работать с объектами из другого потока в Unity - PullRequest
0 голосов
/ 04 мая 2020

У меня есть библиотека, которая работает с доступом к объектам на сцене, мне нужно что-то, что метод, который я вызываю в другом потоке, может что-то сделать на сцене, я буду очень благодарен за помощь.

Я использую класс задачи

    return Task.Run(() =>
    {
        // My method in library
    });

1 Ответ

1 голос
/ 04 мая 2020

Вы не можете изменять объекты Unity вне основного потока. Поэтому, если вашей задаче нужно изменить объект Unity, вам нужно будет извлечь SynchronizationContext из основного потока и использовать его для публикации или отправки работы обратно в основной поток для изменений и ссылок на объект фактически единства.

// make sure you are on the main thread when you call this next line.
SynchronizationContext mainThreadSyncContext = SynchronizationContext.Current;
Task.Run(() => {
    // do heavy work
    // then when you want to modify a unity object or referenc them, you have to delegate the work to run
    // on the main thread.
    mainThreadSyncContext.Post(_ => {
        // async so it does not block and the work will be executed at some point (most likely the next tick)
        // safely reference Unity objects and functions
    }, null);

    mainThreadSyncContext.Send(_ => {
        // synchronous so it will send the the main thread and wait for a return before continuing
        // safely reference Unity objects and functions
    }, null);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...