반응형
Action을 이용해서 MouseAction 이벤트를 구독하고 사용하는 코드
KeyBoardAction, MouseAction을 구독한 함수들의 로직을 OnUpdate에서 Invoke()로 모두 실행한다
public class InputManager
{
public Action KeyBoardAction = null;
public Action<Define.MouseEvent> MouseAction = null;
bool _pressed = false;
public void OnUpdate()
{
if (EventSystem.current.IsPointerOverGameObject())
return;
if(Input.anyKey && KeyBoardAction != null)
KeyBoardAction.Invoke();
if(MouseAction != null)
{
if (Input.GetMouseButton(0))
{
MouseAction.Invoke(Define.MouseEvent.Press);
_pressed = true;
}
else
{
if (_pressed)
MouseAction.Invoke(Define.MouseEvent.Click);
_pressed = false;
}
}
}
public void Clear()
{
KeyBoardAction = null;
MouseAction = null;
}
}
구독
void Start()
{
// 혹시라도 다른 곳에서 OnMouseClicked를 구독한 경우를 방지하기 위해 삭제 후 재구독
Managers.Input.MouseAction -= OnMouseClicked;
Managers.Input.MouseAction += OnMouseClicked;
}
OnUpdate는 한군데에서 굴려준다. 나는 Managers라는 게임매니저 싱글톤 클래스에서 굴려주었다
public class Managers : MonoBehaviour
{
private InputManager _input = new InputManager();
public static InputManager Input { get { return Instance._input; } }
void Update()
{
_input.OnUpdate();
}
}
반응형
'유니티 > 유니티 C#' 카테고리의 다른 글
[유니티/C#] 모바일 환경 멀티터치 구현 (0) | 2023.08.10 |
---|---|
[유니티/c#] json으로 데이터 관리하기 (0) | 2023.07.27 |
[유니티/C#] SoundManager (0) | 2023.07.25 |
[유니티/C#] Reflection으로 enum 받아오기 (0) | 2023.07.22 |
[유니티/C#] 마우스 위치로 바라보기 (0) | 2023.07.12 |