using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;
using UnityEngine.EventSystems;
public class UIRelicDirector : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
public Image[] imgRelic;
[SerializeField]
private SpriteAtlas sa;
private int relicCnt;
[SerializeField]
private RectTransform[] rects;
[SerializeField]
private GameObject[] relicDescPopups;
[SerializeField]
private Text[] txtName;
[SerializeField]
private Text[] txtDesc;
private bool[] isPopupActive;
public void Init()
{
EventDispatcher.Instance.AddListener<string, bool>(EventDispatcher.EventName.UIRelicDirectorTakeRelic, this.TakeRelic);
this.isPopupActive = new bool[relicDescPopups.Length];
}
public bool TakeRelic(string relicName)
{
bool isRelicNotFull = true;
if (this.relicCnt >= 3) isRelicNotFull = false;
if (isRelicNotFull)
{
this.imgRelic[this.relicCnt].gameObject.SetActive(true);
this.imgRelic[this.relicCnt].sprite = this.sa.GetSprite(relicName);
var relicData = DataManager.Instance.GetRelicDataFromPrefabName(relicName);
this.txtName[this.relicCnt].text = relicData.name;
this.txtDesc[this.relicCnt].text = relicData.disc;
this.rects[this.relicCnt].gameObject.SetActive(true);
}
this.relicCnt++;
return isRelicNotFull;
}
public void OnPointerDown(PointerEventData eventData)
{
for (int i = 0; i < this.rects.Length; i++)
{
if (RectTransformUtility.RectangleContainsScreenPoint(this.rects[i], eventData.position))
this.isPopupActive[i] = true;
else
this.isPopupActive[i] = false;
}
for (int i = 0; i < this.relicDescPopups.Length; i++)
{
if (this.isPopupActive[i] && this.rects[i].gameObject.activeSelf)
this.relicDescPopups[i].SetActive(true);
else
this.relicDescPopups[i].SetActive(false);
}
}
public void OnPointerUp(PointerEventData eventData)
{
for(int i = 0; i < this.relicDescPopups.Length; i++)
{
this.relicDescPopups[i].SetActive(false);
}
}
}
유니티의 이벤트시스템을 활용하여 터치하면 팝업이 생성되고 터치를 떼었을 때 팝업이 꺼지도록 기능을 구현하였습니다. 팝업 내용은 데이터테이블에 의해 내용이 정해지도록 구현하였으며 터치되는 위치를 인식하여 해당 위치에 터치되면 특정 인덱스의 팝업이 켜지도록 구현하였습니다.
'Unity2D' 카테고리의 다른 글
Unity) [유니티 2D] Glow 효과 (0) | 2023.05.17 |
---|---|
Unity) [유니티 2D] 셰이더를 활용하여 이미지 흰색으로 변경 (0) | 2023.05.15 |
Unity) [유니티 2D] 터치 기준 조이스틱 이동시키기 (0) | 2023.05.14 |
Unity) [유니티 2D] 타일맵 Collider 사이즈 관련 (0) | 2023.05.08 |
Unity) [유니티 2D] 베지어 곡선을 통한 데미지 텍스트 구현 (0) | 2023.05.06 |