Unity3D_MMO - InputManager

k_hyun·2022년 10월 8일
0

Unity_MMO_Project

목록 보기
1/33

InputManager.cs

public class InputManager 
{
    public Action KeyAction = null;
    
    public void OnUpdate()
    {
        if (Input.anyKey == false)
            return;

        if (KeyAction != null)
            KeyAction.Invoke();
    }
}

버튼입력을 위한 InputManager 스크립트를 작성하였다.

Action을 사용하였는데 이는 반환값이 없는 메서드를 등록하는 델리게이트이다.

Managers.cs의 Update()에서 OnUpdate()함수를 작동한다.

Managers.cs

public class Managers : MonoBehaviour
{
    static Managers s_instance;
    static Managers Instance { get { Init(); return s_instance; } }  //  외부에서 다른 Manager를 호출하여 Instance를 호출할 때
                                                                     //  Init()함수도 호출됨

    InputManager _input = new InputManager();
    public static InputManager Input { get { return Instance._input; } }
    
    ...
    
    void Update()
    {
        _input.OnUpdate();
    }
}    

PlayerController.cs

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    float _speed = 10.0f;

    void Start()
    {
        // 구독 취소 후 신청 느낌
        Managers.Input.KeyAction -= OnKeyboard;
        Managers.Input.KeyAction += OnKeyboard;
    }   
    
    ...
    
    void Onkeyboard()

	{
		...
    }    

OnKeyboard() 함수는 키를 눌렀을 때 캐릭터가 이동하고 회전하는 기능을 넣어놓았다.

작동 방식

우선 PlayerController.cs의 Start()에서 KeyAction이 등록이 된다.

Managers.cs 에서 Update() 안에서 _input.OnUpdate()가 매 프레임 실행이 된다.

만약 버튼이 눌리면 OnUpdate()의 keyAction 즉 OnKeyboard()가 실행되어 캐릭터가 움직이게 된다.

0개의 댓글