diff --git a/AxibugEmuOnline.Client/Assets/Resources/IMPORTENT.prefab b/AxibugEmuOnline.Client/Assets/Resources/IMPORTENT.prefab
index b559c20e..038080ca 100644
--- a/AxibugEmuOnline.Client/Assets/Resources/IMPORTENT.prefab
+++ b/AxibugEmuOnline.Client/Assets/Resources/IMPORTENT.prefab
@@ -10,7 +10,7 @@ GameObject:
   m_Component:
   - component: {fileID: 3186794564434009199}
   - component: {fileID: 1464475178787633862}
-  - component: {fileID: 2053226018124086955}
+  - component: {fileID: 3126747713153700628}
   m_Layer: 0
   m_Name: EventSystem
   m_TagString: Untagged
@@ -48,7 +48,7 @@ MonoBehaviour:
   m_FirstSelected: {fileID: 0}
   m_sendNavigationEvents: 0
   m_DragThreshold: 10
---- !u!114 &2053226018124086955
+--- !u!114 &3126747713153700628
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -57,17 +57,28 @@ MonoBehaviour:
   m_GameObject: {fileID: 173080370084988713}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+  m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_SendPointerHoverToParent: 1
-  m_HorizontalAxis: Horizontal
-  m_VerticalAxis: Vertical
-  m_SubmitButton: Submit
-  m_CancelButton: Cancel
-  m_InputActionsPerSecond: 10
-  m_RepeatDelay: 0.5
-  m_ForceModuleActive: 0
+  m_MoveRepeatDelay: 0.5
+  m_MoveRepeatRate: 0.1
+  m_XRTrackingOrigin: {fileID: 0}
+  m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_DeselectOnBackgroundClick: 1
+  m_PointerBehavior: 0
+  m_CursorLockBehavior: 0
+  m_ScrollDeltaPerTick: 6
 --- !u!1 &261166211120060501
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxibugEmuOnline.Client.asmdef b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxibugEmuOnline.Client.asmdef
index b7f7eaf3..4c67b1ed 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxibugEmuOnline.Client.asmdef
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxibugEmuOnline.Client.asmdef
@@ -6,7 +6,8 @@
         "VirtualNes.Core",
         "UIEffect2018",
         "Mame.Core",
-        "Essgee.Unity"
+        "Essgee.Unity",
+        "Unity.InputSystem"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
index 92d88d8a..8fff0861 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
@@ -1,15 +1,30 @@
 using System.Collections.Generic;
 using UnityEngine;
+using UnityEngine.InputSystem;
 
 namespace AxibugEmuOnline.Client.InputDevices
 {
     public class InputDevicesManager
     {
+        InputResolver m_inputResolver = InputResolver.Create();
         Dictionary<string, InputDevice> m_devices = new Dictionary<string, InputDevice>();
 
         public InputDevicesManager()
         {
-            AddDevice(new KeyBoard());
+            m_inputResolver.OnDeviceConnected += OnDeviceConnected;
+            m_inputResolver.OnDeviceLost += OnDeviceLost;
+            foreach (var device in m_inputResolver.GetDevices())
+                AddDevice(device);
+        }
+
+        private void OnDeviceLost(InputDevice lostDevice)
+        {
+
+        }
+
+        private void OnDeviceConnected(InputDevice connectDevice)
+        {
+            throw new System.NotImplementedException();
         }
 
         public void AddDevice(InputDevice device)
@@ -77,9 +92,10 @@ namespace AxibugEmuOnline.Client.InputDevices
         public bool AnyKeyDown { get; private set; }
 
         protected Dictionary<string, KeyBase> m_keyMapper = new Dictionary<string, KeyBase>();
-
-        public InputDevice()
+        protected InputResolver m_resolver;
+        public InputDevice(InputResolver resolver)
         {
+            m_resolver = resolver;
             foreach (var key in DefineKeys())
             {
                 m_keyMapper[key.KeyName] = key;
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver.meta
new file mode 100644
index 00000000..5884599b
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8fec275f55ad33a4fbe0ce724bc7274f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs
new file mode 100644
index 00000000..3ab06251
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs
@@ -0,0 +1,133 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace AxibugEmuOnline.Client.InputDevices
+{
+    /// <summary>
+    /// 双向字典
+    /// </summary>
+    /// <typeparam name="TKey"></typeparam>
+    /// <typeparam name="TValue"></typeparam>
+    public class DualWayDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IDictionary
+        where TKey : notnull
+        where TValue : notnull
+    {
+        private readonly Dictionary<TKey, TValue> _forward = new();
+        private readonly Dictionary<TValue, TKey> _reverse = new();
+
+        // 显式实现非泛型接口
+        bool IDictionary.IsFixedSize => false;
+        bool IDictionary.IsReadOnly => false;
+        bool ICollection.IsSynchronized => false;
+        object ICollection.SyncRoot => ((ICollection)_forward).SyncRoot;
+
+        // 泛型接口实现
+        public TValue this[TKey key]
+        {
+            get => _forward[key];
+            set
+            {
+                if (_forward.TryGetValue(key, out var oldValue))
+                    _reverse.Remove(oldValue);
+                _forward[key] = value;
+                _reverse[value] = key;
+            }
+        }
+
+        object? IDictionary.this[object key]
+        {
+            get => key is TKey k ? _forward[k] : null;
+            set
+            {
+                if (key is TKey tk && value is TValue tv)
+                    this[tk] = tv;
+            }
+        }
+
+        public ICollection<TKey> Keys => _forward.Keys;
+        public ICollection<TValue> Values => _forward.Values;
+
+        ICollection IDictionary.Keys => _forward.Keys;
+        ICollection IDictionary.Values => _forward.Values;
+
+        public int Count => _forward.Count;
+        public bool IsReadOnly => false;
+
+        // 双向查询扩展
+        public bool TryGetKey(TValue value, out TKey key) => _reverse.TryGetValue(value, out key);
+        public bool TryGetValue(TKey key, out TValue value) => _forward.TryGetValue(key, out value);
+
+        // 接口方法实现
+        public void Add(TKey key, TValue value)
+        {
+            if (_forward.ContainsKey(key) || _reverse.ContainsKey(value))
+                throw new ArgumentException("键或值已存在");
+            _forward.Add(key, value);
+            _reverse.Add(value, key);
+        }
+
+        public void Add(KeyValuePair<TKey, TValue> item) => Add(item.Key, item.Value);
+
+        void IDictionary.Add(object key, object value)
+        {
+            if (key is TKey k && value is TValue v)
+                Add(k, v);
+            else
+                throw new ArgumentException("类型不匹配");
+        }
+
+        public bool Contains(object key) => key is TKey k && _forward.ContainsKey(k);
+        public bool Contains(KeyValuePair<TKey, TValue> item) => _forward.TryGetValue(item.Key, out var v) && v.Equals(item.Value);
+        public bool ContainsKey(TKey key) => _forward.ContainsKey(key);
+
+        public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
+        {
+            ((ICollection<KeyValuePair<TKey, TValue>>)_forward).CopyTo(array, arrayIndex);
+        }
+
+        public void CopyTo(Array array, int index)
+        {
+            ((ICollection)_forward).CopyTo(array, index);
+        }
+
+        public bool Remove(TKey key)
+        {
+            if (!_forward.Remove(key, out var value)) return false;
+            _reverse.Remove(value);
+            return true;
+        }
+
+        public bool Remove(KeyValuePair<TKey, TValue> item) => Remove(item.Key);
+
+        void IDictionary.Remove(object key)
+        {
+            if (key is TKey k) Remove(k);
+        }
+
+        public void Clear()
+        {
+            _forward.Clear();
+            _reverse.Clear();
+        }
+
+        // 枚举器实现
+        public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() => _forward.GetEnumerator();
+        IDictionaryEnumerator IDictionary.GetEnumerator() => new DictionaryEnumerator(_forward.GetEnumerator());
+        IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
+
+        // 非泛型枚举器适配器
+        private class DictionaryEnumerator : IDictionaryEnumerator
+        {
+            private readonly IEnumerator<KeyValuePair<TKey, TValue>> _enumerator;
+            public DictionaryEnumerator(IEnumerator<KeyValuePair<TKey, TValue>> enumerator) => _enumerator = enumerator;
+
+            public DictionaryEntry Entry => new(_enumerator.Current.Key, _enumerator.Current.Value);
+            public object Key => _enumerator.Current.Key;
+            public object? Value => _enumerator.Current.Value;
+            public object Current => Entry;
+            public bool MoveNext() => _enumerator.MoveNext();
+            public void Reset() => _enumerator.Reset();
+        }
+    }
+}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs.meta
new file mode 100644
index 00000000..8346d0ac
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: c1c60fee919bdf34983705af53c629f6
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs
new file mode 100644
index 00000000..44fe1a91
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs
@@ -0,0 +1,57 @@
+using System.Collections.Generic;
+
+namespace AxibugEmuOnline.Client.InputDevices
+{
+    public abstract class InputResolver
+    {
+        public static InputResolver Create()
+        {
+#if ENABLE_INPUT_SYSTEM //InputSystem
+            return new InputSystemResolver();
+#elif UNITY_PSP2 //SDK
+            throw new System.NotImplementedException();
+#elif UNITY_PS3 //SDK
+            throw new System.NotImplementedException();
+#else //使用旧Input
+            throw new System.NotImplementedException();    
+#endif
+        }
+        /// <summary> 禁止外部构造 </summary>
+        protected InputResolver()
+        {
+            OnInit();
+        }
+
+        protected abstract void OnInit();
+
+        /// <summary>
+        /// 获得所有当前已连入的输入设备
+        /// </summary>
+        /// <returns></returns>
+        public abstract IEnumerable<InputDevice> GetDevices();
+
+        /// <summary>
+        /// 检查指定输入设备是否还保持着连接
+        /// </summary>
+        /// <returns></returns>
+        public abstract bool CheckOnline(InputDevice device);
+
+        /// <param name="lostDevice">丢失的设备</param>
+        public delegate void OnDeviceLostHandle(InputDevice lostDevice);
+        /// <summary> 当设备丢失时触发 </summary>
+        public event OnDeviceLostHandle OnDeviceLost;
+        protected void RaiseDeviceLost(InputDevice lostDevice)
+        {
+            OnDeviceLost?.Invoke(lostDevice);
+        }
+
+        /// <param name="connectDevice">建立连接的设备</param>
+        public delegate void OnDeviceConnectedHandle(InputDevice connectDevice);
+        /// <summary> 当设备连接时触发 </summary>
+        public event OnDeviceConnectedHandle OnDeviceConnected;
+        protected void RaiseDeviceConnected(InputDevice connectDevice)
+        {
+            OnDeviceConnected?.Invoke(connectDevice);
+        }
+    }
+}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs.meta
new file mode 100644
index 00000000..fc7b2ce9
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 120c0ed2a5e098a4d84325be244aa9f3
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs
new file mode 100644
index 00000000..30ca2b2a
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs
@@ -0,0 +1,65 @@
+#if ENABLE_INPUT_SYSTEM
+using System.Collections.Generic;
+using IP = UnityEngine.InputSystem.InputSystem;
+using IPDevice = UnityEngine.InputSystem.InputDevice;
+using IPKeyboard = UnityEngine.InputSystem.Keyboard;
+
+namespace AxibugEmuOnline.Client.InputDevices
+{
+    /// <summary> InputSystem对接 </summary>
+    public class InputSystemResolver : InputResolver
+    {
+        DualWayDictionary<IPDevice, InputDevice> m_devices = new DualWayDictionary<IPDevice, InputDevice>();
+
+        protected override void OnInit()
+        {
+            foreach (var device in IP.devices)
+            {
+                AddDevice(device);
+            }
+
+            IP.onDeviceChange += IP_onDeviceChange;
+        }
+
+        private void AddDevice(IPDevice ipdev)
+        {
+            InputDevice newDevice = null;
+            if (ipdev is IPKeyboard) newDevice = new KeyBoard(this);
+
+            if (newDevice != null)
+            {
+                m_devices.Add(ipdev, newDevice);
+                RaiseDeviceConnected(newDevice);
+            }
+        }
+
+        private void RemoveDevice(IPDevice ipdev)
+        {
+            if (m_devices.TryGetValue(ipdev, out var device))
+            {
+                m_devices.Remove(ipdev);
+                RaiseDeviceLost(device);
+            }
+        }
+
+        public override bool CheckOnline(InputDevice device)
+        {
+            return m_devices.TryGetKey(device, out var _);
+        }
+
+        private void IP_onDeviceChange(IPDevice device, UnityEngine.InputSystem.InputDeviceChange changeType)
+        {
+            switch (changeType)
+            {
+                case UnityEngine.InputSystem.InputDeviceChange.Added: AddDevice(device); break;
+                case UnityEngine.InputSystem.InputDeviceChange.Removed: RemoveDevice(device); break;
+            }
+        }
+
+        public override IEnumerable<InputDevice> GetDevices()
+        {
+            return m_devices.Values;
+        }
+    }
+}
+#endif
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs.meta
new file mode 100644
index 00000000..07098ed2
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: e56617975c158684eb627cfb4a1c3ebd
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
index 01a02ae0..b475b9c9 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
@@ -1,13 +1,53 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
 
 namespace AxibugEmuOnline.Client.InputDevices
 {
-    public class KeyBoard : InputDevice
+    public partial class KeyBoard : InputDevice
+    {
+        public override string UniqueName => nameof(KeyBoard);
+        public override bool Online => true;
+
+        public KeyBoard(InputResolver resolver) : base(resolver) { }
+
+        protected override IEnumerable<KeyBase> DefineKeys()
+        {
+            var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc) as KeyBase);
+            return keys;
+        }
+
+        public class KeyboardKey : KeyBase
+        {
+            internal KeyCode m_listenKey;
+
+            public KeyboardKey(KeyCode listenKey)
+            {
+                m_listenKey = listenKey;
+            }
+
+            public override bool GetButtonDown()
+            {
+                return Input.GetKeyDown(m_listenKey);
+            }
+
+            public override bool GetButtonUp()
+            {
+                return Input.GetKeyUp(m_listenKey);
+            }
+
+            public override bool IsPressing()
+            {
+                return Input.GetKey(m_listenKey);
+            }
+
+            public override string KeyName => m_listenKey.ToString();
+        }
+    }
+
+    #region HardCodeForKeyboard
+    public partial class KeyBoard : InputDevice
     {
-        #region HardCodeForKeyboard
         static readonly List<KeyCode> s_keyboardKeys = new List<KeyCode>
         {
             // 字母键 A-Z
@@ -50,6 +90,7 @@ namespace AxibugEmuOnline.Client.InputDevices
             KeyCode.End, KeyCode.PageUp, KeyCode.PageDown, KeyCode.Pause, KeyCode.ScrollLock,
             KeyCode.Clear
         };
+
         // 字母键 A-Z
         public KeyboardKey A { get; private set; } = new KeyboardKey(KeyCode.A);
         public KeyboardKey B { get; private set; } = new KeyboardKey(KeyCode.B);
@@ -174,42 +215,6 @@ namespace AxibugEmuOnline.Client.InputDevices
         public KeyboardKey Pause { get; private set; } = new KeyboardKey(KeyCode.Pause);
         public KeyboardKey ScrollLock { get; private set; } = new KeyboardKey(KeyCode.ScrollLock);
         public KeyboardKey Clear { get; private set; } = new KeyboardKey(KeyCode.Clear);
-        #endregion
-
-        public override string UniqueName => nameof(KeyBoard);
-        public override bool Online => true;
-
-        protected override IEnumerable<KeyBase> DefineKeys()
-        {
-            var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc) as KeyBase);
-            return keys;
-        }
-
-        public class KeyboardKey : KeyBase
-        {
-            internal KeyCode m_listenKey;
-
-            public KeyboardKey(KeyCode listenKey)
-            {
-                m_listenKey = listenKey;
-            }
-
-            public override bool GetButtonDown()
-            {
-                return Input.GetKeyDown(m_listenKey);
-            }
-
-            public override bool GetButtonUp()
-            {
-                return Input.GetKeyUp(m_listenKey);
-            }
-
-            public override bool IsPressing()
-            {
-                return Input.GetKey(m_listenKey);
-            }
-
-            public override string KeyName => m_listenKey.ToString();
-        }
     }
+    #endregion
 }
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/InputUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/InputUI.cs
index a91b7c51..35514431 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/InputUI.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/InputUI.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections;
 using UnityEngine;
 using UnityEngine.UI;
@@ -14,8 +14,6 @@ namespace AxibugEmuOnline.Client
 
         public static bool IsInputing { get; private set; }
 
-
-
         protected override void OnShow(object param)
         {
             ValueTuple<Action<string>, string, string> t = (ValueTuple<Action<string>, string, string>)param;
@@ -30,7 +28,7 @@ namespace AxibugEmuOnline.Client
             base.Update();
 
             IsInputing = m_input.isFocused;
-
+            
             if (IsInputing && Input.GetButtonDown("Submit"))
             {
                 OnCmdEnter();
diff --git a/AxibugEmuOnline.Client/Packages/manifest.json b/AxibugEmuOnline.Client/Packages/manifest.json
index 655d4e84..cf2078f8 100644
--- a/AxibugEmuOnline.Client/Packages/manifest.json
+++ b/AxibugEmuOnline.Client/Packages/manifest.json
@@ -2,6 +2,7 @@
   "dependencies": {
     "com.unity.2d.sprite": "1.0.0",
     "com.unity.ide.visualstudio": "2.0.22",
+    "com.unity.inputsystem": "1.11.2",
     "com.unity.test-framework": "1.4.5",
     "com.unity.ugui": "2.0.0",
     "com.unity.modules.accessibility": "1.0.0",
diff --git a/AxibugEmuOnline.Client/Packages/packages-lock.json b/AxibugEmuOnline.Client/Packages/packages-lock.json
index c85b164b..ce338603 100644
--- a/AxibugEmuOnline.Client/Packages/packages-lock.json
+++ b/AxibugEmuOnline.Client/Packages/packages-lock.json
@@ -22,6 +22,15 @@
       },
       "url": "https://packages.unity.com"
     },
+    "com.unity.inputsystem": {
+      "version": "1.11.2",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.modules.uielements": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
     "com.unity.test-framework": {
       "version": "1.4.5",
       "depth": 0,
diff --git a/AxibugEmuOnline.Client/ProjectSettings/EditorBuildSettings.asset b/AxibugEmuOnline.Client/ProjectSettings/EditorBuildSettings.asset
index 650f2575..017ad1ae 100644
--- a/AxibugEmuOnline.Client/ProjectSettings/EditorBuildSettings.asset
+++ b/AxibugEmuOnline.Client/ProjectSettings/EditorBuildSettings.asset
@@ -8,4 +8,6 @@ EditorBuildSettings:
   - enabled: 1
     path: Assets/Scene/AxibugEmuOnline.Client.unity
     guid: eb0c18a619175384d95147898a43054b
-  m_configObjects: {}
+  m_configObjects:
+    com.unity.input.settings.actions: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_UseUCBPForAssetBundles: 0