UI를 관리하는 UiManager, TextManager, ButtonManager를 생성.
Prefab에 대한 이해
//UiManager
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System;
using System.Collections.Generic;
using UnityEditor.Rendering;
using Unity.VisualScripting;
using System.Linq;
public class UiManager : MonoBehaviour
{
[SerializeField] private GameManager gameManager;
[SerializeField] private TextManager textManager;
[SerializeField] private ButtonManager buttonManager;
[SerializeField] private GameObject upgradeScrollPanel;
[SerializeField] private GameObject stockScrollPanel;
[SerializeField] private GameObject hirePanel;
[SerializeField] private GameObject infoPanel;
[SerializeField] private GameObject storePanel;
[SerializeField] private GameObject gachaPanel;
[SerializeField] private GameObject teamBuildingPanel;
[SerializeField] private GameObject teamPanel;
[SerializeField] private GameObject teamInfoPanel;
[SerializeField] private GameObject employeeScrollPanel;
[SerializeField] private GameObject hpBar;
void Awake()
{
OffMenuPanel();
SetGachaPanel();
OffGachaPanel();
SetTeamBuildingPanel();
SetUpgradeScrollPanel();
SetStockScrollPanel();
SetHpBar();
}
public void OffMenuPanel()
{
upgradeScrollPanel.SetActive(false);
stockScrollPanel.SetActive(false);
hirePanel.SetActive(false);
infoPanel.SetActive(false);
storePanel.SetActive(false);
teamBuildingPanel.SetActive(false);
OffEmployeeScrollPanel();
OffTeamInfoPanel();
}
public void SetMenuPanel(GameObject obj)
{
if (obj.activeSelf == true) OffMenuPanel();
else
{
OffMenuPanel();
obj.SetActive(true);
if (obj == teamBuildingPanel) SetTeamInfo(1);
// if (obj == employeeScrollPanel) gameManager.ShowEmploy(employeeScrollPanel.GetComponent<ScrollRect>().content);
if (obj == stockScrollPanel) gameManager.ShowStock(stockScrollPanel.GetComponent<ScrollRect>().content);
}
}
public void SetTeamInfo(int jobType)
{
gameManager.ShowEmploy(employeeScrollPanel.GetComponent<ScrollRect>().content, jobType, true);
// gameManager.ShowEmploy(teamInfoPanel.GetComponent<GridLayoutGroup>().transform, jobType, false);
}
public List<Employee> GetSeclectedEmployee()
{
List<Employee> selectedEmployees = new List<Employee>();
foreach (Transform child in employeeScrollPanel.GetComponent<ScrollRect>().content)
{
Employee employee = child.GetComponent<Employee>();
}
return selectedEmployees;
}
private void SetGachaPanel()
{
RectTransform rt = gachaPanel.GetComponent<RectTransform>();
GridLayoutGroup grid = gachaPanel.GetComponent<GridLayoutGroup>();
float side = Math.Min(rt.rect.width / 3 - 3, rt.rect.height / 2 - 3);
grid.cellSize = new Vector2(side, side);
}
public GameObject GetGachaPanel()
{
return gachaPanel;
}
public void OnGachaPanel()
{
gachaPanel.SetActive(true);
}
public void OffGachaPanel()
{
foreach (Transform child in gachaPanel.GetComponent<Transform>())
{
Destroy(child.gameObject);
}
gachaPanel.SetActive(false);
}
private void SetTeamBuildingPanel()
{
RectTransform content = employeeScrollPanel.GetComponent<ScrollRect>().content;
GridLayoutGroup grid = content.GetComponent<GridLayoutGroup>();
float side = content.rect.width / 4;
grid.cellSize = new Vector2(side, side);
}
private void SetUpgradeScrollPanel()
{
RectTransform content = upgradeScrollPanel.GetComponent<ScrollRect>().content;
GridLayoutGroup grid = content.GetComponent<GridLayoutGroup>();
float side = content.rect.height / 4;
grid.cellSize = new Vector2(content.rect.width, side);
}
private void SetStockScrollPanel()
{
RectTransform content = stockScrollPanel.GetComponent<ScrollRect>().content;
GridLayoutGroup grid = content.GetComponent<GridLayoutGroup>();
float side = content.rect.height / 4;
grid.cellSize = new Vector2(content.rect.width, side);
}
public void OnEmployeeScrollPanel()
{
}
public void OffEmployeeScrollPanel()
{
foreach (Transform child in employeeScrollPanel.GetComponent<ScrollRect>().content)
{
Destroy(child.gameObject);
}
// employeeScrollPanel.SetActive(false);
}
public void OffStockScrollPanel()
{
foreach (Transform child in stockScrollPanel.GetComponent<ScrollRect>().content)
{
Destroy(child.gameObject);
}
employeeScrollPanel.SetActive(false);
}
//이거 왜 참조 0개임
public void RefreshStockPanel()
{
foreach (Transform child in stockScrollPanel.GetComponent<ScrollRect>().content)
Destroy(child.gameObject);
gameManager.ShowStock(stockScrollPanel.GetComponent<ScrollRect>().content);
}
public void OffTeamInfoPanel()
{
foreach (Transform child in teamInfoPanel.GetComponent<GridLayoutGroup>().transform)
{
Destroy(child.gameObject);
}
// employeeScrollPanel.SetActive(false);
}
public void SetHpBar()
{
GameObject currentHpBar = hpBar.transform.Find("Current").gameObject;
// Debug.Log(currentHpBar.GetComponent<Image>());
currentHpBar.GetComponent<Image>().fillAmount = gameManager.GetPlayer().GetCurHp() / (float)gameManager.GetPlayer().GetMaxHp();
// Debug.Log("Fill Amount : " + gameManager.GetPlayer().GetCurHp() / (float)gameManager.GetPlayer().GetMaxHp());
textManager.SetHpInfoText(gameManager.GetPlayer().GetCurHp(), gameManager.GetPlayer().GetMaxHp(), gameManager.GetPlayer().GetRecoverHpPersecond());
}
}
//TextManager
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using Unity.Android.Gradle.Manifest;
using UnityEditor.Rendering.LookDev;
using System;
public class TextManager : MonoBehaviour
{
[SerializeField] private GameManager gameManager;
[SerializeField] private UiManager uiManager;
[SerializeField] private ButtonManager buttonManager;
[SerializeField] private TextMeshProUGUI wonText;
[SerializeField] private TextMeshProUGUI wonPerClickText;
[SerializeField] private TextMeshProUGUI dollarText;
[SerializeField] private TextMeshProUGUI dollarPerMonthText;
[SerializeField] private TextMeshProUGUI dateText;
[SerializeField] private TextMeshProUGUI hpInfoText;
void Start()
{
SetWonText();
SetDollarText();
SetWonPerClickText();
SetDollarPerMonthText();
SetDateText();
}
void Update()
{
SetDateText();
}
public void SetWonText()
{
wonText.text = "\\\\: " + gameManager.GetWon().ToString();
}
public void SetDollarText()
{
dollarText.text = "$: " + gameManager.GetDollar().ToString();
}
public void SetWonPerClickText()
{
wonPerClickText.text = gameManager.GetPlayer().GetWonPerClick().ToString() + "\\\\/Click";
}
public void SetDollarPerMonthText()
{
dollarPerMonthText.text = gameManager.GetDollarPerMonth().ToString() + "\\\\/Month";
}
public void SetDateText()
{
dateText.text = gameManager.GetDate().GetDate() + " " + gameManager.GetDate().GetTime();
}
public void SetClickLevelUpButton(Button button)
{
Text costText = button.transform.Find("Cost").GetComponent<Text>();
TextMeshProUGUI infoText = button.transform.Find("InfoText").GetComponent<TextMeshProUGUI>();
if (gameManager.GetPlayer().GetClickLevel() == DataBase.MAX_LEVEL) {
costText.text = "MAX";
infoText.text = "Click Level Up\\nLV : MAX";
}
else {
costText.text = DataBase.clickLevelUpCost[gameManager.GetPlayer().GetClickLevel()].ToString();
infoText.text = "Click Level Up\\nLV : " + gameManager.GetPlayer().GetClickLevel().ToString();
}
}
public void SetHpLevelUpButton(Button button)
{
Text costText = button.transform.Find("Cost").GetComponent<Text>();
TextMeshProUGUI infoText = button.transform.Find("InfoText").GetComponent<TextMeshProUGUI>();
if (gameManager.GetPlayer().GetHpLevel() == DataBase.MAX_LEVEL)
{
costText.text = "MAX";
infoText.text = "Hp Level Up\\nLV : MAX";
}
else
{
costText.text = DataBase.hpLevelUpCost[gameManager.GetPlayer().GetHpLevel()].ToString();
infoText.text = "Hp Level Up\\nLV : " + gameManager.GetPlayer().GetHpLevel().ToString();
}
}
public void SetMaxEmployeeLevelUpButton(Button button, String typeName)
{
Text costText = button.transform.Find("Cost").GetComponent<Text>();
TextMeshProUGUI infoText = button.transform.Find("InfoText").GetComponent<TextMeshProUGUI>();
if (gameManager.GetEmployeeValue().GetLevel() == DataBase.MAX_EMPLOYEE_LEVEL)
{
costText.text = "MAX";
infoText.text = "Max Employee Level Up\\nLV : MAX";
}
else
{
costText.text = DataBase.valueCost[typeName][gameManager.GetEmployeeValue().GetLevel()].ToString();
infoText.text = "Max Employee Level Up\\nLV : " + gameManager.GetEmployeeValue().GetLevel().ToString();
}
SetWonText();
}
public void SetMaxTeamLevelUpButton(Button button, String typeName)
{
Text costText = button.transform.Find("Cost").GetComponent<Text>();
TextMeshProUGUI infoText = button.transform.Find("InfoText").GetComponent<TextMeshProUGUI>();
if (gameManager.GetTeamValue().GetLevel() == DataBase.MAX_TEAM_LEVEL)
{
costText.text = "MAX";
infoText.text = "Max Team Level Up\\nLV : MAX";
}
else
{
costText.text = DataBase.valueCost[typeName][gameManager.GetTeamValue().GetLevel()].ToString();
infoText.text = "Max Team Level Up\\nLV : " + gameManager.GetTeamValue().GetLevel().ToString();
}
SetWonText();
}
public void SetMaxAppLevelUpButton(Button button, String typeName)
{
Text costText = button.transform.Find("Cost").GetComponent<Text>();
TextMeshProUGUI infoText = button.transform.Find("InfoText").GetComponent<TextMeshProUGUI>();
if (gameManager.GetAppValue().GetLevel() == DataBase.MAX_APP_LEVEL)
{
costText.text = "MAX";
infoText.text = "Max App Level Up\\nLV : MAX";
}
else
{
costText.text = DataBase.valueCost[typeName][gameManager.GetAppValue().GetLevel()].ToString();
infoText.text = "Max App Level Up\\nLV : " + gameManager.GetAppValue().GetLevel().ToString();
}
SetWonText();
}
public void SetGachaInfoText(GameObject obj, Employee employee)
{
TextMeshProUGUI nameText = obj.transform.Find("NameText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI rankText = obj.transform.Find("RankText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI wagesText = obj.transform.Find("WagesText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI statText = obj.transform.Find("StatText").GetComponent<TextMeshProUGUI>();
nameText.text = employee.GetName();
rankText.text = employee.GetRankType().ToString();
wagesText.text = "Wage\\n" + employee.GetWage().ToString();
statText.text = "Stat\\n" + employee.GetStat().ToString();
}
public void SetEmployeeChooseText(GameObject obj, Employee employee)
{
TextMeshProUGUI nameText = obj.transform.Find("NameText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI rankText = obj.transform.Find("RankText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI wagesText = obj.transform.Find("WagesText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI statText = obj.transform.Find("StatText").GetComponent<TextMeshProUGUI>();
nameText.text = employee.GetName();
rankText.text = employee.GetRankType().ToString();
wagesText.text = "Wage\\n" + employee.GetWage().ToString();
statText.text = "Stat\\n" + employee.GetStat().ToString();
}
public void SetHpInfoText(int curHp, int maxHp, int recoverHpPerSecond)
{
hpInfoText.text = curHp.ToString() + "/" + maxHp.ToString() + " " + recoverHpPerSecond.ToString() + "/s";
}
public void SetStockText(GameObject obj, Stock stock)
{
TextMeshProUGUI StockNameText = obj.transform.Find("StockNameText").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI StockCost = obj.transform.Find("StockCost").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI StockChangeRate = obj.transform.Find("StockChangeRate").GetComponent<TextMeshProUGUI>();
TextMeshProUGUI StockHavingCount = obj.transform.Find("StockHavingCount").GetComponent<TextMeshProUGUI>();
StockNameText.text = stock.GetStockName();
StockCost.text = "\\\\" + stock.GetStockCost().ToString();
if (stock.GetStockChangeRate() > 0.0)
{
StockChangeRate.text = "+" + stock.GetStockChangeRate().ToString("F1") + "%";
StockChangeRate.color = Color.red;
}
else if (stock.GetStockChangeRate() == 0.0)
{
StockChangeRate.text = stock.GetStockChangeRate().ToString("F1") + "%";
StockChangeRate.color = Color.black;
}
else
{
StockChangeRate.text = stock.GetStockChangeRate().ToString("F1") + "%";
StockChangeRate.color = Color.blue;
}
StockHavingCount.text = stock.GetStockHavingCount().ToString() + "주";
}
}
//ButtonMananger
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using Unity.Android.Gradle.Manifest;
public class ButtonManager : MonoBehaviour
{
[SerializeField] private GameManager gameManager;
[SerializeField] private UiManager uiManager;
[SerializeField] private TextManager textManager;
[SerializeField] private Button ClickLevelUpButton;
[SerializeField] private Button HpLevelUpButton;
[SerializeField] private Button MaxEmployeeLevelUpButton;
[SerializeField] private Button MaxTeamLevelUpButton;
[SerializeField] private Button MaxAppLevelUpButton;
[SerializeField] private Button DeveloperHireButton;
[SerializeField] private Button DesignerHireButton;
[SerializeField] private Button PlannerHireButton;
[SerializeField] private Button ExpertHireButton;
[SerializeField] private Button TeamBuildingButton;
void Awake()
{
textManager.SetClickLevelUpButton(ClickLevelUpButton);
textManager.SetHpLevelUpButton(HpLevelUpButton);
textManager.SetMaxEmployeeLevelUpButton(MaxEmployeeLevelUpButton, "Employee");
textManager.SetMaxTeamLevelUpButton(MaxTeamLevelUpButton, "Team");
textManager.SetMaxAppLevelUpButton(MaxAppLevelUpButton, "App");
}
public void BackGroundButtonClicked()
{
Debug.Log("AddWonButton Clicked");
gameManager.GetPlayer().Clicked();
}
public void ClickLevelUpButtonClicked(GameObject button)
{
Debug.Log("WonPerClickLevelUpButton Clicked");
gameManager.GetPlayer().ClickLevelUp();
textManager.SetClickLevelUpButton(ClickLevelUpButton);
}
public void HpLevelUpButtonClicked(GameObject button)
{
Debug.Log("HpLevelUpButton Clicked");
gameManager.GetPlayer().HpLevelUp();
textManager.SetHpLevelUpButton(HpLevelUpButton);
}
public void MaxEmployeeLevelUpButtonClicked(GameObject button)
{
Debug.Log("MaxEmployeeLevelUpButton Clicked");
gameManager.GetEmployeeValue().LevelUp(DataBase.MAX_EMPLOYEE_LEVEL, "Employee");
textManager.SetMaxEmployeeLevelUpButton(MaxEmployeeLevelUpButton, "Employee");
}
public void MaxTeamLevelUpButtonClicked(GameObject button)
{
Debug.Log("MaxTeamLevelUpButton Clicked");
gameManager.GetTeamValue().LevelUp(DataBase.MAX_TEAM_LEVEL, "Team");
textManager.SetMaxEmployeeLevelUpButton(MaxTeamLevelUpButton, "Team");
}
public void MaxAppLevelUpButtonClicked(GameObject button)
{
Debug.Log("MaxAppLevelUpButton Clicked");
gameManager.GetAppValue().LevelUp(DataBase.MAX_APP_LEVEL, "App");
textManager.SetMaxAppLevelUpButton(MaxAppLevelUpButton, "App");
}
public void MainPanelButtonClicked(GameObject obj)
{
uiManager.SetMenuPanel(obj);
}
public void GachaButtonClicked(int job)
{
gameManager.EmployeeGacha(job);
}
private void GachaChooseButtonClicked(Employee employee)
{
gameManager.AddEmployee(employee);
gameManager.GetGacha().ToggleIsGacha();
uiManager.OffGachaPanel();
}
public void SetGachaInfoButton(GameObject obj, Employee employee)
{
Button btn = obj.transform.Find("ChooseButton").GetComponent<Button>();
btn.onClick.AddListener(() => GachaChooseButtonClicked(employee));
}
public void SetEmployeeChooseToggle(GameObject obj, Employee employee)
{
Toggle toggle = obj.GetComponent<Toggle>();
if (toggle == null) Debug.Log("Null Toggle Object");
toggle.onValueChanged.AddListener(EmployeeChooseToggleClicked);
}
public void SetStockButton(GameObject obj, Stock stock)
{
Button buybtn = obj.transform.Find("BuyButton").GetComponent<Button>();
Button sellbtn = obj.transform.Find("SellButton").GetComponent<Button>();
buybtn.onClick.AddListener(() => StockBuyButtonClicked(obj, stock));
sellbtn.onClick.AddListener(() => StockSellButtonClicked(obj, stock));
}
public void JobTypeButtonClicked(int jobType)
{
uiManager.OffEmployeeScrollPanel();
uiManager.OffTeamInfoPanel();
uiManager.SetTeamInfo(jobType);
}
private void EmployeeChooseToggleClicked(bool isOn)
{
}
private void StockBuyButtonClicked(GameObject obj, Stock stock)
{
if (gameManager.SubWon(stock.GetStockCost() + stock.GetStockCost()/1000))
{
stock.Add();
textManager.SetStockText(obj, stock);
}
//Debug.Log(stock.GetStockName());
}
private void StockSellButtonClicked(GameObject obj, Stock stock)
{
//Debug.Log(stock.GetStockName());
if (stock.Sub()) gameManager.AddWon(stock.GetStockCost() - stock.GetStockCost()/1000);
textManager.SetStockText(obj, stock);
//수수료 0.1%
}
}