【解决】Unity3D中无法在MQTT事件中执行Animator

news2025/1/12 23:08:34

问题原因:

解决方法:

解决过程

1、在 Unity 中创建一个名为 MainThreadDispatcher 的脚本,用于处理主线程操作。

using System.Collections.Generic;
using UnityEngine;

public class MainThreadDispatcher : MonoBehaviour
{
    private static MainThreadDispatcher instance;
    private static readonly Queue<System.Action> actionQueue = new Queue<System.Action>();

    private void Awake()
    {
        instance = this;
    }

    private void Update()
    {
        lock (actionQueue)
        {
            while (actionQueue.Count > 0)
            {
                System.Action action = actionQueue.Dequeue();
                action.Invoke();
            }
        }
    }

    public static void ExecuteOnMainThread(System.Action action)
    {
        lock (actionQueue)
        {
            actionQueue.Enqueue(action);
        }
    }
}

2、在 Unity 中创建一个名为 MainThreadDispatcherInitializer 的脚本,用于初始化 MainThreadDispatcher。

using UnityEngine;

public class MainThreadDispatcherInitializer : MonoBehaviour
{
    private void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
        gameObject.AddComponent<MainThreadDispatcher>();
    }
}

3、在 Unity 中创建一个名为 MainThreadDispatcherInitializer 的空 GameObject,并将 MainThreadDispatcherInitializer 脚本添加到该 GameObject 上。

4、在其他脚本中,可以通过 MainThreadDispatcher.ExecuteOnMainThread 方法将操作推送到主线程执行。

public class ExampleScript : MonoBehaviour
{
    private void Start()
    {
        // 在其他线程中执行操作
        System.Threading.Thread thread = new System.Threading.Thread(() =>
        {
            // 模拟耗时操作
            System.Threading.Thread.Sleep(2000);

            // 在主线程中执行操作
            MainThreadDispatcher.ExecuteOnMainThread(() =>
            {
                // 执行动画操作
                Debug.Log("操作在主线程中执行");
            });
        });

        thread.Start();
    }
}

在这也感谢siki学院的Sk-Sky老师耐心的帮我远程解决问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue的华山旅游网(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【java】【SpringBoot】【四】原理篇 bean、starter、核心原理

目录 一、自动配置 1、bean加载方式&#xff08;复习&#xff09; 1.1 加载方式-xml方式生命bean 1.2 加载方式-xml注解方式声明bean 1.3 注解方式声明配置类 1.4 FactoryBean 1.5 proxyBeanMethod属性 1.6 使用Import注解导入 1.7 使用上下文对象在容器初始化完毕后注…

(第三百篇BLOG记录)写于博士毕业与入职之初-20230924

启 由于若干原因&#xff08;包括但不限于紧锣密鼓的完成博士毕业的一系列实验和论文撰写、学习各种百花齐放的有意思的领域、完成人生身份的重大转变&#xff09;&#xff0c;导致卡在299篇博客已经很久了&#xff0c;不过算了一下还是在一个较长时间维度上可以基本保持每周一…

CompletableFuture-FutureTask

2. CompletableFuture 语雀 2.1 Future接口理论知识复习 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行一些方法&#xff0c;如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。 举例&#xff1a;…

github pages 部署单页面

github pages介绍 GitHub Pages是一个免费的托管服务&#xff0c;可以直接从GitHub存储库中创建和托管网站。可以使用GitHub Pages来构建自己的网站或为项目生成网站。每个GitHub帐户和组织都可以拥有一个站点&#xff0c;以及无限的项目站点。 主站点的地址就是用户名.githu…

基于springboot+vue的云南旅游网(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux离线安装elasticsearch|header|kibna插件最详细

1.准备软件安装包 [hadoophost152 elasticsearch]$ ll -rw-r--r--. 1 hadoop hadoop 515807354 9月 23 23:40 elasticsearch-8.1.1-linux-x86_64.tar.gz -rw-r--r--. 1 hadoop hadoop 1295593 9月 23 23:48 elasticsearch-head-master.tar.gz -rw-r--r--. 1 hadoop hadoop…

Android修行手册 - Android Studio去掉方法参数提示、变量类型提示、方法引用Usage提示

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

Hudi第一章:编译安装

系列文章目录 Hudi第一章&#xff1a;编译安装 文章目录 系列文章目录前言一、环境准备1.JDK2.Maven1.上传并解压。2.修改源3.添加环境变量 二、hudi编译1.上传解压2.修改pom1.添加仓库2.修改依赖的组件版本 2.修改源码兼容hadoop33.手动安装Kafka依赖1.上传jar包2.install到m…

Linux使用一个脚本启用、停用springboot项目(本文带脚本)

前言 如果仅需要脚本的小伙伴可以下拉至后面&#xff0c;我这里一步一步交大家发布项目 学习之前我们要先会搭建一个项目 可以去看这篇文章&#xff1a;搭建一个SpringBoot项目 一、首先我们配置多环境 0、resources文件如下 1、配置pom.xml文件 <build><!--打包…

uniapp webview实现双向通信

需求&#xff1a;uniapp webview嵌套一个h5 实现双向通信 uniapp 代码 <template><view><web-view src"http://192.168.3.150:9003/" message"onMessage"></web-view></view> </template><script>export defau…

精品基于Python房源爬虫实现数据可视化分析

《[含文档PPT源码等]精品基于Python实现的爬虫实现数据可视化分析》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript…

JavaScript中的解构赋值

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 对象解构赋值⭐ 数组解构赋值⭐ 默认值和剩余元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚…

【面试经典150 | 滑动窗口】长度最小的子数组

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;暴力枚举方法二&#xff1a;滑动窗口 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些…

stable diffusion模型评价框架

GhostReview:全球第一套AI绘画ckpt评测框架代码 - 知乎大家好&#xff0c;我是_GhostInShell_&#xff0c;是全球AI绘画模型网站Civitai的All Time Highest Rated (全球历史最高评价) 第二名的GhostMix的作者。在上一篇文章&#xff0c;我主要探讨自己关于ckpt的发展方向的观点…

如何模拟自然界生态系统中的食物链

本人最近在研究一款针对青少年儿童的教育游戏&#xff0c;希望从培养孩子各方面的综合素质出发&#xff0c;引导孩子掌握多方面的软知识&#xff0c;软技能。其中有一个比较新颖的游戏玩法------打猎。该玩法创新点在于&#xff0c;引入了食物链的概念。过去一般的游戏里&#…

【C++】STL之list深度剖析及模拟实现

目录 前言 一、list 的使用 1、构造函数 2、迭代器 3、增删查改 4、其他函数使用 二、list 的模拟实现 1、节点的创建 2、push_back 和 push_front 3、普通迭代器 4、const 迭代器 5、增删查改(insert、erase、pop_back、pop_front) 6、构造函数和析构函数 6.1、默认构造…

BGP-IBGP(第九课)

BGP-IBGP(第九课) 0 IBGP 水平分割的概念 1 BGP 反射器 2 IBGP 互联不了的原因 3 BGP 通告原则 4 IBGP 互通 方案一 静态路由 5 IBGP 互通 方案二 OSPF 中引入BGP 6 IBGP 互通 方案三 全网互通 7 IBGP 互通 方案四 反射器 0 IBGP 水平分割的概念 通过IBGP获得的最优路由不会发…

网页文本编辑器

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>文本编辑器</title><style>.box {height: 500px;width: 1000px;margin: auto;background-color: navajowhite;}.box_h {/* font-weight: normal; */text-al…

基于springboot小区疫情防控系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…