무민은귀여워

[유니티] InputManager 본문

IT/Unity

[유니티] InputManager

moomini 2022. 5. 17. 12:32
반응형

입력처리를 위한 InputManger

- 다른 곳에서 (PlayerController 등) 여러번 입력 체크하지 않고, 매니저에서 한번 체크한 뒤 이벤트로 전파하는 방식을 가능하게 한다
- 입력을 update문에서 직접 처리하면, 코드양이 많아졌을 때 입력 출처를 알기 어려움

1. InputManager 만들기

2. Managers 에 추가

3. PlayerController 에 함수등록

1. InputManager 만들기

Managers에서 사용되므로 굳이 MonoBehaviour 로 만들지 않아도 된다

using System;
public class InputManager
{
public Action KeyAction = null;
public void OnUpdate()
{
if (Input.anyKey == false)
return;
if (KeyAction != null)
KeyAction.Invoke();
}
}

2. Managers 에 추가

public class Managers : MonoBehaviour
{
static Managers s_instance; // 유일성이 보장된다
static Managers Instance { get { Init(); return s_instance; } } // 유일한 매니저를 갖고온다
InputManager _input = new InputManager();
public static InputManager Input { get { return Instance._input; } }
// Start is called before the first frame update
void Start()
{
Init();
}
// Update is called once per frame
void Update()
{
_input.OnUpdate();
}
...

3. PlayerController 에 함수등록

public class PlayerController : MonoBehaviour
{
[SerializeField]
float _speed = 10.0f;
void Start()
{
Managers.Input.KeyAction -= OnKeyboard; // 다른곳에서 이미 등록되었을 경우 방지
Managers.Input.KeyAction += OnKeyboard;
}
...
void OnKeyboard()
{
if (Input.GetKey(KeyCode.W))
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f);
transform.position += Vector3.forward * Time.deltaTime * _speed;
}
if (Input.GetKey(KeyCode.S))
{
...
반응형

'IT > Unity' 카테고리의 다른 글

[유니티] 충돌 Collision / Trigger / Raycast / LayerMask  (0) 2022.05.17
[유니티] ResourceManager  (0) 2022.05.17
[유니티] 회전 rotation  (0) 2022.05.16
[유니티] transform, Vector3  (0) 2022.05.16
[유니티] 싱글톤 패턴  (0) 2022.05.16
Comments