KeyboardInput单例模式 2024-05-04 10 笔记  ```csharp using UnityEngine; namespace Client.Input { public class KeyboardInput : MonoBehaviour { private static KeyboardInput _instance; public static KeyboardInput Instance { get { if (_instance) return _instance; _instance = FindObjectOfType(); if (_instance) return _instance; var go = new GameObject("KeyboardInput"); _instance = go.AddComponent(); return _instance; } } public Vector2 Direction { get; private set; } private void Awake() { if (_instance is not null && _instance != this) { Destroy(gameObject); } else { _instance = this; } } private void Update() { if (UnityEngine.Input.GetKey(KeyCode.A)) { Direction = new Vector2(-1, Direction.y); } if (UnityEngine.Input.GetKey(KeyCode.D)) { Direction = new Vector2(1, Direction.y); } if (UnityEngine.Input.GetKey(KeyCode.W)) { Direction = new Vector2(Direction.x, 1); } if (UnityEngine.Input.GetKey(KeyCode.S)) { Direction = new Vector2(Direction.x, -1); } if (UnityEngine.Input.GetKey(KeyCode.A) && UnityEngine.Input.GetKey(KeyCode.D)) { Direction = new Vector2(0, Direction.y); } if (!UnityEngine.Input.GetKey(KeyCode.A) && !UnityEngine.Input.GetKey(KeyCode.D)) { Direction = new Vector2(0, Direction.y); } if (UnityEngine.Input.GetKey(KeyCode.W) && UnityEngine.Input.GetKey(KeyCode.S)) { Direction = new Vector2(Direction.x, 0); } if (!UnityEngine.Input.GetKey(KeyCode.W) && !UnityEngine.Input.GetKey(KeyCode.S)) { Direction = new Vector2(Direction.x, 0); } } } } ``` GetKey可能并不完美,但是在后期供玩家修改键位时会有用。但也不推荐,现在我们可以使用Unity新的输入系统,这里不做过多介绍。 本文链接: https://shrinken.pw/crash-2024-05-04_72-fml.html