禁用控件后无法启用控件是指在使用Unity新输入系统时,当我们将一个控件禁用(Disable)后,无法直接通过启用(Enable)来重新激活该控件。这是因为Unity新输入系统中的控件状态是由InputAction来管理的,禁用控件实际上是将其对应的InputAction的Enable状态设置为false,而无法直接通过Enable来重新激活。 要解决这个问题,我们可以...
在菜单栏中选择“Window→Package Manager”在弹出的 Package Manager面板中选中“Input System”,单击右下角的Install安装,如果列表中显示的内容较少并找不到Input System时,可以将窗口顶部的“Packages”切换为“Unity Registry”即可。 Package Manager安装展示图 安装后选择“Yes”,会重启Unity,重启后安装完毕。 安装...
接着打开 Edit -> Project Settings,在 Player 选项页中的 Other Settings -> Configuration 中设置 Active Input Handling 为 Input System 以禁用旧输入系统,以防止两个输入系统的冲突和杜绝隐患。 此时,你的工程中已经成功安装了新输入系统。 Input System 简单介绍 有关新输入系统的内容几乎都在 UnityEngine.In...
1,InputAction inputAction 是inputSystem帮助我们封装的输入动作类, 它的主要作用,是不需要我们通过书写代码的形式来处理输入, 而是直接再inspector窗口编辑想要处理的输入类型。 当输入触发时,我们只需要将精力花在输入触发后的逻辑处理上。 在使用InputAction前,需要导入命名空间using UnityEngine.InputSystem; 书写 脚...
publicclassPlayer:MonoBehaviour{publicInputActionmoveAction;publicvoidOnEnable(){moveAction.Enable();}publicvoidOnDisable(){moveAction.Disable();}// 此时我们自定义的InputAction即可正常使用publicvoidUpdate(){varmove=moveAction.ReadValue<Vector2>();//...}} ...
通过Package Manager安装好InputSystem之后可以同时导入一些范例资源,阅读其使用代码,InputSystem有几种不同的使用方法,开发时应按需求酌情选择。 需要注意的是,安装好InputSystem之后会有提示询问是否切换到新版输入管理系统,切换后Input Setting面板将失效,游戏中也无法使用Input类获取输入。
InputControls.Player.Fire.started -= OnFireDown;// 移除开火开始事件的监听InputControls.Player.Fire.canceled -= OnFireUp;// 移除开火结束事件的监听InputControls.Disable();// 禁用输入控制} 测试效果 可以看到,我们使用一套代码就可以同时监听键盘和鼠标的输入 ...
public void DisableAllInputs() { playerinputaction.GamePlay.Disable();//8.1动作表不起用 } void OnDisable()//9.对象变为禁用时调用此函数 { DisableAllInputs(); } public void OnMove(InputAction.CallbackContext context) { //11.Inout Action Phase输入动作阶段 ...
if(inputAction!=null){ inputAction.performed+=OnPerformed; inputAction.Enable(); } } 3.在Destroy函数反注册回调函数,并禁用InputAction: void OnDestory(){ //... if(inputAction!=null){ inputAction.performed-=OnPerformed; inputAction.Disable(); ...
_inputSystemAsset.Player.SetCallbacks(new PlayerActionCallback(this)); _inputSystemAsset.Enable(); } } publicvoidOnDisable(){ _inputSystemAsset.Disable(); }// Update is called once per framevoidFixedUpdate(){ rigidbody.velocity = new Vector3(Move.y,0,Move.x)*Speed; ...