유니티3D 프로그래밍

Unity UGUI Test (21.04.20) 본문

Unity/수업내용

Unity UGUI Test (21.04.20)

tjdgus9955 2021. 4. 20. 13:01

게임의 Scene UI들을 구현해본다.

 

테스트 영상

 

현재 Scene의 구성 오브젝트 들이다.

UIPrefab이 로비 화면을 구성하는 오브젝트다.

Greed의 내부에 있는 오브젝트는 화면 하단 6개의 버튼을 뜻하고

이름이 ~Info라고 끝나는 오브젝트들은 화면 상단의 프로필과 + 모양 버튼을 담당하는 오브젝트다.

Login은 오른쪽 하단의 facebook 이미지의 버튼인데 로그인과는 맞지 않는 형태라 생각해서 바꿀 예정.

아마 왼쪽 하단의 버튼이 로그인이 아닌가 생각됨.

스크립트는 UI와 LoginUI로 나뉘어져 있고 Title 스크립트에서 전체적인 스크립트 컨트롤을 관리하는 역할을 한다.

InputText

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InputText : MonoBehaviour
{
    public InputField inputTextID;
    public InputField inputTextPassword;

    public void ID(Text text)
    {
        text.text = inputTextID.text;
    }

    public void Password(Text text)
    {
        text.text = inputTextPassword.text;
    }
}

LoginUIButton

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LoginUiButton : MonoBehaviour
{
    public Button btn;
}

LoginUIText : 빈 스크립트

 

UIPopupLogin

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIPopupLogin : MonoBehaviour
{
    public bool isCheck = false;

    public Button btnClose;
    public InputField inputEmail;
    public InputField inputPwd;
    public Button btnRemember;
    public Button btnLogin;
    public Button btnSignup;
    public Button btnForgotPwd;

    public GameObject[] arrChecks;
}

 

UIBudget

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIBudget : MonoBehaviour
{
    public Button btn;
    public Text txtAmount;

    public virtual void Init(int amount)
    {
        this.txtAmount.text = amount.ToString();
    }
}

UIHeartBudget

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIHeartBudget : UIBudget
{
    public Text txtHeartAmount;
    public int Max { get; set; }

    public override void Init(int amount)
    {
        if (amount >= this.Max)
        {
            this.txtHeartAmount.text = this.Max.ToString();
            this.txtAmount.text = "FULL";
        }
        else
        {
            base.Init(amount);
            this.txtAmount.text = "00:32";
        }
    }
}

UILogin

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UILogin : MonoBehaviour
{
    public Button loginBtn;
}

UIMenuButton

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIMenuButton : MonoBehaviour
{
    public Button btn;
}

UIProfile : 빈 프로젝트

UITitle

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UITitle : MonoBehaviour
{
    public enum eMenuType
    {
        Items, Shop, Messages, Mission, Ranking, Settings
    }
    public enum eBudgetType
    {
        Heart, Coin, Dia
    }

    public UIProfile uiProfile;
    public UIBudget[] arrBudgets;
    public UIMenuButton[] arrMenuButtons;
    public Button loginButton;

    private void Start()
    {
        this.Init();
    }

    public void Init()
    {
        for (int i = 0; i < this.arrMenuButtons.Length; i++)
        {
            var btn = this.arrMenuButtons[i].btn;
            var idx = i; //캡쳐링 
            btn.onClick.AddListener(() => {
                Debug.Log((eMenuType)idx);
            });
        }

        for (int i = 0; i < this.arrBudgets.Length; i++)
        {
            UIBudget uiBudget = this.arrBudgets[i];
            var btn = uiBudget.btn;
            var idx = i;
            btn.onClick.AddListener(() => {
                Debug.Log((eBudgetType)idx);
            });
        }


        var heartBudget = (UIHeartBudget)GetUIBudget(eBudgetType.Heart);
        heartBudget.Max = 5;
        heartBudget.Init(6);

        var coinBudget = this.GetUIBudget(eBudgetType.Coin);
        coinBudget.Init(10000);
    }

    public UIBudget GetUIBudget(eBudgetType budgetType)
    {
        return this.arrBudgets[(int)budgetType];
    }
}

 

Title

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Title : MonoBehaviour
{
    public UITitle uiTitle;
    public UIPopupLogin uiPopupLogin;

    private void Start()
    {
        this.Init();
    }
    public void Init()
    {
        this.uiTitle.loginButton.onClick.AddListener(() => {
            this.uiPopupLogin.gameObject.SetActive(true);
            this.uiPopupLogin.inputEmail.text = "";
            this.uiPopupLogin.inputPwd.text = "";
        });
        this.uiPopupLogin.btnClose.onClick.AddListener(() => {
            this.uiPopupLogin.gameObject.SetActive(false);
        });
        this.uiPopupLogin.btnLogin.onClick.AddListener(() => {
            var email = this.uiPopupLogin.inputEmail.text;
            var pwd = this.uiPopupLogin.inputPwd.text;
            Debug.LogFormat("{0}, {1}", email, pwd);
        });
        this.uiPopupLogin.btnSignup.onClick.AddListener(() => {
            Debug.Log("signup");
        });
        this.uiPopupLogin.btnForgotPwd.onClick.AddListener(() => {
            Debug.Log("forgot password");
        });
        this.uiPopupLogin.btnRemember.onClick.AddListener(() => {
            Debug.Log("remember");
            if (this.uiPopupLogin.isCheck)
            {
                this.uiPopupLogin.isCheck = false;
                this.uiPopupLogin.arrChecks[0].SetActive(false);
                this.uiPopupLogin.arrChecks[1].SetActive(true);
            }
            else
            {
                this.uiPopupLogin.isCheck = true;
                this.uiPopupLogin.arrChecks[0].SetActive(true);
                this.uiPopupLogin.arrChecks[1].SetActive(false);
            }
        });
    }
}

 

빈 프로젝트들은 추후에 다른 기능을 추가할 예정이다.