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操作基础,可百度,不再赘述。