TIL 팀프로젝트#2

김소연·2025년 2월 25일
  1. 인게임화면에서 조이스틱을 사용하면 일시정지 버튼을 누를 수 없어서
    ESC를 누르면 일시정지가 되도록 방향 수정
  2. DOTween을 이용한 팝업/ 팝업 애니메이션
public class PopupUI : MonoBehaviour
{
    [SerializeField] Button noBtn;
    [SerializeField] Button closeBtn;
    [SerializeField] Button exitBtn;


    public RectTransform panelTransform; // 팝업 판넬의 transform
    private bool isPopupAcitve = false; // 팝업 열렸는지, 닫혔는지
    public CanvasGroup popupCanvasGroup; // canvas 전체


    public void Start()
    {
        popupCanvasGroup.alpha = 0;  // 처음은 투명한 상태
        popupCanvasGroup.blocksRaycasts = false;  // 클릭x
        popupCanvasGroup.interactable = false;  // 비활성화

        noBtn.onClick.AddListener(OnCloseButtonClick); // no 버튼
        closeBtn.onClick.AddListener(OnCloseButtonClick); // 닫기 버튼
        exitBtn.onClick.AddListener(OnExitButtonClick); // 게임 종료 버튼
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (isPopupAcitve) { ClosePopup(); }
            else { OpenPopup(); }
        }
    }

    // 팝업 오픈
    public void OpenPopup()
    {
        isPopupAcitve = true;

        // 판넬 활성화
        popupCanvasGroup.gameObject.SetActive(true);

        // DOtween 애니메이션 
        // 2초동안 확대 애니메이션
        popupCanvasGroup.DOFade(1, 0.2f).SetEase(Ease.OutBack);

        popupCanvasGroup.blocksRaycasts = true; // 클릭 활성화
        popupCanvasGroup.interactable = true;
    }

    public void ClosePopup()
    {
        isPopupAcitve = false;
        // 크기 줄어들면서 팝업 사라짐
        popupCanvasGroup.DOFade(0, 0.2f).SetEase(Ease.InBack).OnComplete(() =>
        {
            popupCanvasGroup.blocksRaycasts = false;
            popupCanvasGroup.interactable = false;
        });
    }

    // 게임 이어서하기 버튼 (팝업 닫기)
    public void OnCloseButtonClick()
    {
        ClosePopup();
    }

    // 게임 종료 버튼
    public void OnExitButtonClick()
    {
        // 전처리 작업 필요
        Application.Quit();
    }
  • HomeUI에서 사용한 PopupUI를 인게임 일시정지에서 재사용할 수 있을지
    (안 될 것 같다. - 조이스틱 문제도 해결해야 하고, 버튼 구성도 다르다)
  1. HP바 구현 : 슬라이더 / FollowPlayer.cs
public class FollowPlayer : MonoBehaviour
{
    public Transform player;

    //GameManager gameManager;
    // 오브젝트 위치
    RectTransform rectTransform;

    

    public float height = 0.1f;

    void Awake()
    {
        

        rectTransform = GetComponent<RectTransform>();
        if (rectTransform == null)
            Debug.LogError("RectTransform NULL");
        //DontDestroyOnLoad(gameObject);
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        // 스크린 좌표로 플레이어의 위치를 변환해서 따라간다

        Vector3 screenPoint = Camera.main.WorldToScreenPoint(new Vector3(player.position.x, player.transform.position.y));
        rectTransform.position = screenPoint;


    }
}
  1. UI전환문제 해결 -..........
  2. UI끼리 연결

너무 많은 정보를 한 번에 흡수하고,,.
UI끼리 관계를 생각하다보니까 시간이 정말 빠르게 지났다.
DOTween을 이용하니 시간이 정말 많이 단축되었고, 이를 이용해 남은 UI 작업을 빠르게 마치는 것이 목표다.
이어서 사운드/상점/인벤토리를 구축해야 하고, UI디자인을 미관상 좋게 바꿔야 하기 때문에 시간이 빠듯할 것으로 보인다.

0개의 댓글