Unity 关于Plugins放入dll在IOS端运行异常的bug

2023-11-14

    好久没写博客了,今天被一个问题困扰了好久,网上了查不到相应的解决方案,自行解决后才觉得还是写写博客吧,说不定能帮助别人少走弯路……

    首先说明我的运行环境:MAC系统版本号10.13.4, Unity版本号2018.1.0。解释下当前环境的问题,首先MAC系统升级到10.13版本后,文件系统改为了APFS格式,而Windows系统中的Unity 工程是在NTFS格式的文件系统中创建的,所以工程或文件导入MAC系统后,Unity旧版本会无法识别,而unity目前只有Unity2017beta更新了相关的支持,所以我是用了Unity2018版本。但是,也因此出现了一些问题……

    Unity工程的Plugins文件夹中经常会放入一些dll文件,而这些dll文件是在Windows系统中编译生成的,比如dll文件是封装的数据,用来序列化操作,其中一个类如下:

/// <summary>
/// 关卡数据
/// </summary>
[Serializable]
public class LevelData {

    /// <summary>
    /// 关卡ID
    /// </summary>
    public int ID;
    /// <summary>
    /// 关卡等级
    /// </summary>
    public int level;
    /// <summary>
    /// 关卡名称
    /// </summary>
    public string name;
    /// <summary>
    /// 场景ID
    /// </summary>
    public int sceneID;
    /// <summary>
    /// 场景中的敌人id
    /// </summary>
    public int[] enemyIds;
    /// <summary>
    /// 每个敌人id对应的数量
    /// </summary>
    public int[] enemyCounts;
}

    这样能保证我序列化和反序列化用到的是同一个的类,这里序列化和反序列化操作用的是BinaryFormatter的Serialize和Deserialize方法,具体的不再解释。当我把数据序列成二进制文件后,MAC的编辑器下运行反序列化没有任何问题,但是打包到IOS端运行后,反序列化二进制文件会异常……例如反序列化二进制为上面的LevelData,会提示System.Runtime.Serialization.SerializationException: Field "name" not found in class LevelData……大概意思是找不到name字段,就算修改了字段名,也会提示找不到其他字段……

    这个问题非常莫名其妙,排查了好久,最后干脆把dll文件删掉,直接将dll中的源码放入Unity工程中使用,例如LevelData脚本就会放入,这样会被自动编译到Unity工程的程序集文件中。这样运行后发现问题解决了……

    最后问了下以前公司的大佬,他们把Unity工程打包IOS时,是通过移动硬盘在MAC电脑上打包的,而移动硬盘的格式非NTFS的,而是MAC-OS扩展(日志式),这样打包是可以正常使用Plugins中的dll文件的。MAC系统上显示的移动硬盘信息如图:

    其实就是指Unity的工程在Mac上打包不能用NTFS格式的磁盘,因为这是Windows系统格式的。也可以在Mac磁盘上进行分区,单独设置一个分区的格式为Mac OS(日志式)的,这样通过NTFS的硬盘拷贝的工程,直接拷贝到MAC的这个分区上进行打包操作即可。

    因此联想到问题的根源可能是文件系统的原因,因为用的是NTFS格式文件系统工程,就算拷贝到MAC系统上,文件保存的系统格式是不变的,导致打包后无法正常使用。具体的根源还请指导的大神告知……

    还有一种猜想解决方案,的Unity工程中使用的dll,在MAC系统上使用VS for Mac来生成,然后放入到Unity的Plugins文件夹,这样编译的dll就是Mac文件系统格式的。皆因自己无能,找不到MAC上的VS在哪查看和设置FrameWork .NET的版本,生成的dll版本是.NET6的,而Unity旧版本只支持.NET3.5以内的……望知晓的大佬指点下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 关于Plugins放入dll在IOS端运行异常的bug 的相关文章

  • 使用sqlbulkcopy之前如何创建表

    我有一个 DBF 文件 我正在尝试导入该文件 然后将其写入 SQL 表 我遇到的问题是 如果我使用 SqlBulkCopy 它需要我提前创建表 但在我的场景中这是不可能的 因为 dbf 文件不断变化 到目前为止 这是我的代码 public
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • Visual Studio 2010“找不到或打开 PDB 文件”

    我尝试在 Visual Studio 10 中调试程序 但遇到断点问题 我将与 dll 文件对应的 pdb 文件放在同一目录中 但是在检查模块时 我发现每个 DLL 文件都被签名为Cannot find or open the PDB fi
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • android EasyLink给wifi模块配网

    相关文章 博客 http blog csdn net u010924834 article details 49491349 本文使用的是庆科wifi模块 http developer mico io downloads 庆科的开发者地址
  • Windbg查找单例对象

    在程序的达到一定规模之后 就会用到比较多的管理类 这种管理类多采用单例模式 在问题排查过程中往往需要看下管理类里面的某些状态是否符合预期 但是崩溃的堆栈在当前局部变量中并 无该单例的相关引用 单例的实现上是将一个实例化对象保存在静态变量中
  • 网关和IP地址不在同一个网段下

    海外的客户报告了一个问题 设备设置的网关地址不在设备所在的网段下面 例如 IP 192 168 135 2 NetMask 255 255 255 0 GateWay 192 168 8 1 现在的问题来了 设备能不能PING通网关 这个问
  • 解决vue 路由传参后退参数丢失的问题

    文章目录 业务需求 遇到问题 解决方案 利用localStorage 使用keep alive 业务需求 从A页面传参跳转B页面 B页面传参跳转C页面 C页面可以返回B页面 遇到问题 当C页面返回B页面时 由于B页面参数丢失导致页面渲染失败
  • Python爬虫逆向之加速乐

    先上链接 aHR0cHM6Ly93d3cubWlpdC5nb3YuY24v 网站分析 发现发起三次请求 第一次 状态码521 Set Cookie了一个jsluid 第二次 状态码依然是521 但是cookie里面多了一个jsl clear
  • C#使用Npgsql或SqlClient连接数据库

    目录 SqlClient连接SQL Server 安装SqlClient SqlConnection SqlCommand SqlConnection 和 SqlCommand的区别 Npgsql连接PostgreSQL 安装Npgsql
  • (java功能篇) jxl读取excel文本

    jxl是一个韩国人写的java操作excel的工具 在java的开源世界中 有两套比较有影响的API可供使用 一个是POI 一个是jExcelAPI 即jxl jxl功能相对POI比较弱一点 但jExcelAPI对中文支持非常好 API是纯
  • Restful API 接口设计标准以及规范

    RESTful概念 理解和评估以网络为基础的应用软件的架构设计 得到一个功能强 性能好 适宜通信的架构 REST指的是一组架构约束条件和原则 如果一个架构符合REST的约束条件和原则 我们就称它为RESTful架构 REST本身并没有创造新
  • 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.

    Html Css 学习 一 VSCode常用 1 VScode常用快捷键 新建文件 ctrl N 切换自动换行 alt Z 复制当前行 ctrl C ctrl V 执行在默认浏览器 alt B 设置vscode文件折叠属性 打开设置 gt
  • linux火狐无法连接网络,Ubuntu上火狐浏览器无法上网的解决方法

    网上有的方法是在浏览器中选择更新 后来找到了更加直接好用的方法 只需要几行命令就可以 1 在终端中输入sudo apt get update 如果在这一步出现错误 显示暂时不能解析域名的情况 可能是DNS服务器地址需要设置 可执行下列步骤
  • macOS上WebM转MP4文件

    目录 编辑 提出程序要求 安装Homebrew和ffmpeg的步骤 方法 原代码以下 原代码以上 注意 提出程序要求 在macOS上用Script Editor编写一个程序 使用ffmpeg命令来把WebM转换成MP4文件 说明 ffmpe
  • 纯CSS实现呼吸灯&文字&毛玻璃效果

    闲来无事 下一步在平时中应该考虑如何让页面动起来 增加视觉效果 说一说呼吸灯效果吧 我觉得可以用到 就一个brightness滤镜 用动画动起来 文字效果 在页面中系统名称处可以使用 让页面看起来更有活力一点 CSS真是今非昔比了 唉 水一
  • 基于阿里云的maven配置settings.xml

  • 解读升压电路(BOOST)与降压电路(BUCK)

    1 BUCK和BOOST电路详解 541板哥的博客 CSDN博客 buck电路和boost电路 2 升压电路 BOOST 与降压电路 BUCK FFT变换的博客 CSDN博客 buckboost升降压电路原理 3 BUCK BOOST电路原
  • C# replace替换用法

    1 在后台vs使用 content content Replace 545 666 把545替换为666 content content Replace r n 数据显示没有回车换行时 可以使用换行 2在html里使用 content co
  • 数据挖掘的之matplotlib

    数据挖掘的之matplotlib 文章目录 数据挖掘的之matplotlib 什么是Matplotlib 画二维图表的python库 2 1 3 实现一个简单的Matplotlib画图 完善原始折线图2 图像层 2 2 4 多个坐标系显示
  • web.xml 中配置元素错误提示 The content of element type “web-app“ must match “(icon?,display- name?...

    配置xml xml 文件 IDE提示错误信息如下 The content of element type web app must match icon display name description distributable cont
  • 听伯克利博士给你讲解Llama 2的技术细节

    来源 图灵人工智能 文章翻译自 Llama 2 an incredible open LLM 原文作者 NATHAN LAMBERT Meta 近日发表了 Llama 2 的论文 而来自伯克利大学的人工智能专业博士Nathan Lamber
  • 集成电路模拟版图入门-版图基础学习笔记(五)

    第四部分 版图的艺术 模拟版图和数字版图的首要目标 首先考虑的三个问题 匹配 3 1 匹配中心思想 3 2 匹配问题 3 3 如何匹配 3 4 MOS管 3 5 电阻 3 6 电容 3 7 匹配规则 寄生效应 4 1 寄生的产生 4 2 寄
  • Unity 关于Plugins放入dll在IOS端运行异常的bug

    好久没写博客了 今天被一个问题困扰了好久 网上了查不到相应的解决方案 自行解决后才觉得还是写写博客吧 说不定能帮助别人少走弯路 首先说明我的运行环境 MAC系统版本号10 13 4 Unity版本号2018 1 0 解释下当前环境的问题 首