public class Slot : MonoBehaviour, IPointerClickHandler
// 오브젝트를 우클릭 시 Use()메서드 실행
public void OnPointerClick(PointerEventData eventData)
{
if (data == null) return;
if (eventData.button == PointerEventData.InputButton.Right)
{
Use();
}
else if(eventData.button == PointerEventData.InputButton.Middle)
{
uiCursor.transform.position = eventData.position;
uiCursor.UIUpdate(data);
}
}
설명: 위의 3개는 인터페이스로 마우스와 관련된
1. IPointerClickHandler = 마우스로 오브젝트 클릭했을 때
2. IPointerEnterHandler = 마우스가 컴포넌트된 오브젝트에 첫 접속했을 때
3. IPointerExitHandler = 마우스가 컴포넌트 된 오브젝트에 나왔을 때
// Player의 코루틴을 매개변수로 받는 메서드를 생성
public void StartCo(IEnumerator coroutine)
{
StartCoroutine(coroutine);
}
// IEnumerator타입 메서드 생성
IEnumerator TImePlus()
{
delayIcon.fillAmount = 0;
while (delayIcon.fillAmount < 1.0f)
{
delayTime += Time.deltaTime;
if (data != null)
{
delayIcon.fillAmount = delayTime / data.delayTime;
}
yield return null;
}
}
// 해당 아이템 사용 시
delayTime = 0;
GameManager.Instance.Player.StartCo(TImePlus());
문제 발생: 각 슬롯에 아이템을 사용하는 로직을 만들었는데 진행하다보니 슬롯이 활성화일 때만 시간이 감소하는 문제가 발생하였다.
1. 코루틴을 사용해도 오브젝트가 비활성화가 되어 시간이 감소되지 않음 = X
2. Invoke를 사용해도 코루틴과 같이 시간이 감소되지 않음 = X
3. 싱글톤으로 메서드 정보를 받아서 실행 = O
설명: 싱글톤으로 매니저를 받아서 현재 오브젝트가 실행중인 오브젝트에서 IEnumerator 메서드를 실행 시켜 오브젝트가 비활성화가 되어도 시간이 감소된다.
1. IPointerEventHandler: 버튼 이벤트 대신 사용 가능한 입력 이벤트
2. 비활성화 상태에서 시간 감소: 처음 비활성화 상태에서의 로직이라 난행을 겪었는데 이제 하는 방법을 터득하였기 때문에 활용하는 일만 남았다.
1. 플레이어가 다른 오브젝트에 붙어서 앞으로 이동하면 앞이 아닌 위로 이동하는 문제가 발생
1. 없음