unity新版本的inptsystem输入系统插件界面有bug,按键映射的listen被挡住了,就像下图这样
原因特别搞笑,他就是单词拼错了,导致的bug。。。
如果你每次编译了第一次点击path时会发现,控制台报警告了
Unable to find style 'ToolbarSeachTextField'in skin 'DarkSkin'Used
双击进去看看
其实原因是ToolbarSearchTextField
写出了ToolbarSeachTextField
,你可以修改这个单词修复它
一次修改保存可能不会成功,修改两次再保存就可以了
因为是软件包的问题,改了后会发现内容保存在Library临时文件里,如果清除了Library临时文件,使用时每次又要重新来修改,很麻烦
所以我们可以通过书写编辑器代码通过反射进行修改,反射是一种在运行时检查类型、获取类型信息或者动态调用类型方法的能力。
#if ENABLE_INPUT_SYSTEM
using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;
using UnityEngine.InputSystem;
// 初始化时加载此类
[InitializeOnLoad]
public class InputSystemAdvancedFixed : EditorWindow
{
// 用于存储自定义样式的变量
private static GUIStyle customToolbarSearchField;
static FieldInfo toolbarSearchFieldInfo;
// 静态构造函数,在编辑器加载时执行
static InputSystemAdvancedFixed()
{
// 注册一个更新事件,以便在编辑器更新时执行相关操作
EditorApplication.update += OnEditorUpdate;
}
// 编辑器更新时调用的方法
static void OnEditorUpdate()
{
if (customToolbarSearchField == null)
{
// 确保编辑器已经完全初始化
try
{
if (EditorStyles.label != null)
{
CreateCustomStyle();
ReplaceAdvancedDropdownGUI();
}
}
catch
{
}
}
}
static void CreateCustomStyle()
{
customToolbarSearchField = "ToolbarSearchTextField";
}
static void ReplaceAdvancedDropdownGUI()
{
// 获取 Unity 输入系统的程序集
Assembly inputSystemAssembly = typeof(InputSystem).Assembly;
// 获取类型:通过 Assembly.GetType 方法获取 Unity 输入系统中的私有类型 AdvancedDropdownGUI 和它的嵌套类型 Styles
Type advancedDropdownGUIType = inputSystemAssembly.GetType("UnityEngine.InputSystem.Editor.AdvancedDropdownGUI");
Type stylesType = advancedDropdownGUIType.GetNestedType("Styles", BindingFlags.NonPublic);
// 获取字段信息:使用 GetField 方法查找 Styles 类型中的 toolbarSearchField 字段。
toolbarSearchFieldInfo = stylesType.GetField("toolbarSearchField", BindingFlags.Public | BindingFlags.Static);
if (toolbarSearchFieldInfo != null)
{
try
{
// 设置字段值:通过 SetValue 方法动态地修改 toolbarSearchField 的值,将其设置为自定义样式。
toolbarSearchFieldInfo.SetValue(null, customToolbarSearchField);
}
catch
{
}
}
}
}
#endif
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
但是还是有缺点,每次编译都会执行,导致报警告,因为每次编译都要获取那个字段,然后引发的Warning,研究很久也没办法,这个是无法避免的,忽略即可
新增编辑器脚本,放在Editor文件夹下,注意一定要放在Editor文件夹下
好了,舒服了
ps:最新消息貌似这个问题在Unity6终于修复了
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~



评论记录:
回复评论: