Practice_Unity/Assets/Scripts/Managers/InputManager.cs
Seonkyu.kim 488c0858ad 작업
1. UI 버튼 작업 했음
2. 칼, 방패 따로 붙이는 작업 헀음
3. 공격 모션에 이제 버튼 연동함

Todo
1. 공격시 화면 이상하게 흔들리는거 수정할 차례
2. 히트 박스 해서 몬스터 공격하는거 연동하기
2025-09-29 17:59:40 +09:00

102 lines
2.7 KiB
C#

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
public class InputManager: IManager
{
// 화면 터치를 어떻게 받아올건지에 대한 액션
public Action<Define.InputEvent> InputAction = null;
// 화면의 터치하는 실시간 좌표를 사용하는 기능을 위한 액션
public Action<Vector2> PointAction = null;
// 조이스틱의 이동을 담당하는 액션
public Action<Vector2> MoveAction = null;
public VirtualJoystick JoyStick { get; set; }
public VirtualButtons Buttons { get; set; }
private InputActions _action;
bool _pressed = false;
float _pressedTime = 0.0f;
public void Init()
{
_action = new InputActions();
_action.UI.Enable();
}
public void OnUpdate()
{
JoystickInput();
AnyInput();
}
void JoystickInput()
{
if (JoyStick == null)
return;
Vector2 dir = new Vector2(JoyStick.Horizontal, JoyStick.Vertical);
MoveAction?.Invoke(dir);
}
void AnyInput()
{
PointAction?.Invoke(_action.UI.Point.ReadValue<Vector2>());
if (InputAction != null)
{
// UI 위에 마우스(손가락)가 올라가 있는지 체크
if (EventSystem.current.IsPointerOverGameObject())
{
if (_pressed)
{
InputAction.Invoke(Time.time - _pressedTime < 0.2f
? Define.InputEvent.Click
: Define.InputEvent.Up);
}
_pressed = false;
_pressedTime = 0.0f;
return;
}
if (_action.UI.Touch.IsPressed())
{
// Touch를 누르고 있는 상태
if (!_pressed)
{
InputAction.Invoke(Define.InputEvent.Down);
_pressedTime = Time.time;
}
InputAction.Invoke(Define.InputEvent.Press);
_pressed = true;
}
else
{
if (_pressed)
{
if (Time.time - _pressedTime < 0.2f)
InputAction.Invoke(Define.InputEvent.Click);
else
InputAction.Invoke(Define.InputEvent.Up);
_pressed = false;
_pressedTime = 0.0f;
}
}
}
}
public void Clear()
{
_action.Dispose();
InputAction = null;
PointAction = null;
MoveAction = null;
JoyStick = null;
}
}