技术C#unityUnity开发inputSystem的重复注册问题的解决
‘祈止’Unity新版输入系统的事件重复注册问题
最近在学习unity,边学别做了个小游戏。发现一个奇怪的bug,游戏在加载的时候会莫名其妙的报错,出现空指针异常。还会让我的ScriptableObject的文件失效。

反复测试发现,错误出现都是在场景加载的时候。进一步发现是在暂停回到主菜单后再次开始游戏的时候。

检查后发现是inputSystem的问题,这里是我的源码:
1 2 3 4 5 6 7 8 9 10 11
| private void Awake() { instance = this; gameControl = new GameControl(); gameControl.Player.Enable();
gameControl.Player.Interact.performed += Interact_Performed; gameControl.Player.Operate.performed += Operate_Performed; gameControl.Player.Stop.performed += Stop_performed; }
|
只看这段代码其实没问题。但是,游戏在回到开始界面的时候,这里的inputSystem会再次重复执行Awake()。这样就会有两个gameControl同时存在。事件也会注册两次,这样就会出现异常。
解决方法就是写个资源回收的函数OnDestroy,以下是代码:
1 2 3 4 5 6 7 8
| private void OnDestroy() { gameControl.Player.Interact.performed -= Interact_Performed; gameControl.Player.Operate.performed -= Operate_Performed; gameControl.Player.Stop.performed -= Stop_performed;
gameControl.Dispose(); }
|
这里取消了事件,删除了gameControl就解决问题了。