Rewired(知名Unity输入插件)与IL2CPP编译冲突问题

1、Rewired介绍:

目前Unity提供的输入系统,有传统的Input Manager,和新的Input System两种。

前者功能陈旧,不能胜任跨平台输入、玩家自定义输入的需求;后者过度复杂,引入了太多不必要的功能,学习成本高又不是完全成熟,性价比低。

所以现在外网提到输入系统,总是会谈到Rewired插件。这是一个资源商店里的畅销插件,有一定用户基础,地址如下:

https://assetstore.unity.com/packages/tools/utilities/rewired-21676

Rewired的特点是使用相对方便,功能完整,且对switch、PS4手柄、触屏等等多种多样的新设备有很好的支持。该插件历史也比较悠久。

如果要做输入系统比较复杂的游戏,Rewired插件值得参考研究。

2、Rewired与IL2CPP的编译问题

当Unity项目使用IL2CPP编译,且具有Rewird插件时,可能会出现一种编译BUG,编译器报错信息如下:

Exception: Unity.IL2CPP.Building.BuilderFailedException: Rewired_Core17.cpp
E:\lmd_ne\TestRewiredInput\Library\Il2cppBuildCache\Windows\x64\il2cppOutput\Rewired_Core17.cpp(39480) : fatal error C1001: �ڲ�����������
(�������ļ���d:\agent\_work\7\s\src\vctools\Compiler\Utc\src\p2\main.c������ 195 ��)

该信息意思是MSVC C++编译器在编译Rewired_CoreXXX.cpp文件时,编译器直接崩溃了。

该问题为已知问题,Rewired社区有详细描述:

https://guavaman.com/projects/rewired/docs/KnownIssues.html#windows-standalone-il2cpp-vs2019-hang

3、编译器崩溃原因和解决方法

此崩溃仅在使用VS2019时出现,VS2017不出现。

原因本质是因为VS2019采用的新款优化器有BUG,所以错误是微软的编译器造成的,在处理IL2CPP自动生成的模版代码时崩溃。

解决思路也很直接,就是禁用掉有问题的优化器。我测试有用的办法有两种:

1、只改当前Unity工程的办法

设置好Unity的Player Setting以后,用记事本打开asset文件:

  工程目录/ProjectSettings/ProjectSettings.asset

找到 additionalIl2CppArgs:

改为: additionalIl2CppArgs: --compiler-flags=-d2ssa-cfg-jt-

保存asset文件,重新编译打包即可。

2、改Windows环境变量的办法

在windows环境变量设置中,加一个当前用户环境变量。

名称:IL2CPP_ADDITIONAL_ARGS

内容为:--compiler-flags=-d2ssa-cfg-jt-

编译器工作时会读取该环境变量,达到禁用优化器的目的。

具体操作步骤属于win10操作基础,可百度,不再赘述。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值