팀과 앱 Class의 기초 코드를 완성, 팀 빌딩을 위한 인터페이스 제작에 들어갔다.

대부분의 인터페이스 관련 코드는 UiManager에서 관리하므로, 그쪽 코드를 작성하였다.

UiManager 코드:

using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System;
using System.Collections.Generic;
using UnityEditor.Rendering;
using Unity.VisualScripting;
using System.Linq;
using System.Collections;
using System.Net.Sockets;

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 selectedEmployeesPanel;
    [SerializeField] private GameObject employeeScrollPanel;
    [SerializeField] private GameObject teamMakePanel;
    [SerializeField] private GameObject menuPanel;
    [SerializeField] private GameObject backPanel;
    [SerializeField] private GameObject hpBar;
    private int selectedJobType;

    void Awake()
    {
        OffMenuPanel();
        SetGachaPanel();
        OffGachaPanel();
        SetTeamBuildingPanel();
        SetUpgradeScrollPanel();
        SetStockScrollPanel();
        SetHpBar();
        OffBackPanel();
        selectedJobType = 3;
    }
    void Start()
    {
        SetGachaInfo();
    }

    public void OffMenuPanel()
    {
        upgradeScrollPanel.SetActive(false);
        hirePanel.SetActive(false);
        infoPanel.SetActive(false);
        storePanel.SetActive(false);
        teamBuildingPanel.SetActive(false);
        backPanel.SetActive(false);
        OffEmployeeScrollPanel();
        OffSelectedEmployeesPanel();
        OffStockScrollPanel();
        OffTeamBuildPanel();
    }

    public void SetMenuPanel(GameObject obj)
    {
        if (obj.activeSelf == true) OffMenuPanel();
        else
        {
            OffMenuPanel();
            obj.SetActive(true);
            if (obj == teamBuildingPanel) SetTeamInfo();
            // if (obj == employeeScrollPanel) gameManager.ShowEmploy(employeeScrollPanel.GetComponent<ScrollRect>().content);
            if (obj == stockScrollPanel) gameManager.ShowStock(stockScrollPanel.GetComponent<ScrollRect>().content);
        }
    }

    public void OffTeamBuildPanel()
    {
        OffEmployeeScrollPanel();
        OffSelectedEmployeesPanel();
        gameManager.OffEmployeeSelected();
    }

    public void SetSelectedJobType(int jobType)
    {
        selectedJobType = jobType;
    }

    public void SetTeamInfo()
    {
        List<Employee> employees = new List<Employee>();
        if (selectedJobType == 3)
        {
            for (int i = 0; i < 3; i++)
            {
                List<Employee> filteredEmployees = gameManager.GetFilteredEmployees(i, gameManager.GetEmployees());
                employees.AddRange(filteredEmployees);
            }
        }
        else
        {
            employees.AddRange(gameManager.GetFilteredEmployees(selectedJobType, gameManager.GetEmployees()));
        }

        employees = gameManager.GetSortedEmployees(employees);
        gameManager.ShowEmployWithToggle(employeeScrollPanel.GetComponent<ScrollRect>().content, employees);            
        SetSelectedEmployeesPanel();
    }
    public void SetSelectedEmployeesPanel()
    {
        OffSelectedEmployeesPanel();
        List<Employee> selectedEmployees = gameManager.GetSelectedEmployees();
        List<Employee> employees = new List<Employee>();
        if (selectedJobType == 3)
        {
            for (int i = 0; i < 3; i++)
            {
                List<Employee> filteredEmployees = gameManager.GetFilteredEmployees(i, selectedEmployees);
                employees.AddRange(filteredEmployees);
            }
        }
        else
        {
            employees.AddRange(gameManager.GetFilteredEmployees(selectedJobType, selectedEmployees));
        }

        employees = gameManager.GetSortedEmployees(employees);
        gameManager.ShowEmployWithNoToggle(selectedEmployeesPanel.GetComponent<GridLayoutGroup>().transform, employees);
    }

    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 GameObject GetStockPanel()
    {
        return stockScrollPanel;
    }

    public void OnBackPanel()
    {
        backPanel.SetActive(true);
    }

    public void OffBackPanel()
    {
        backPanel.SetActive(false);
    }

    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;
        // float side = menuPanel.GetComponent<RectTransform>().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 = menuPanel.GetComponent<RectTransform>().rect.height / 4;
        grid.cellSize = new Vector2(content.rect.width, side);
    }
    private void SetStockScrollPanel()
    {
        // stockScrollPanel.SetActive(true);
        RectTransform content = stockScrollPanel.GetComponent<ScrollRect>().content;
        GridLayoutGroup grid = content.GetComponent<GridLayoutGroup>();
        float side = menuPanel.GetComponent<RectTransform>().rect.height / 4;
        grid.cellSize = new Vector2(content.rect.width, side);
        // stockScrollPanel.SetActive(false);
    }
    public void SetGachaInfo()
    {
        textManager.SetGachaLevelText(hirePanel.transform.Find("DeveloperHireButton"), "Developer Hire", 0);
        textManager.SetGachaLevelText(hirePanel.transform.Find("DesignerHireButton"), "Designer Hire", 1);
        textManager.SetGachaLevelText(hirePanel.transform.Find("PlannerHireButton"), "Planner Hire", 2);
    }

    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);
        }
        stockScrollPanel.SetActive(false);
    }

    public void OffSelectedEmployeesPanel()
    {
        foreach (Transform child in selectedEmployeesPanel.GetComponent<GridLayoutGroup>().transform)
        {
            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 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());
    }

    public void TogglePanel(GameObject obj)
    {
        if (obj.activeSelf == true) obj.SetActive(false);
        else obj.SetActive(true);
    }

    public void OnPanel(GameObject obj)
    {
        obj.SetActive(true);
    }

    public void OffPanel(GameObject obj)
    {
        obj.SetActive(false);
    }

    public void OffTeamMakePanel()
    {
        teamMakePanel.SetActive(false);
    }

    IEnumerator SetSet()
    {
        yield return new WaitForEndOfFrame();
        SetStockScrollPanel();
        // stockScrollPanel.SetActive(false);
        Debug.Log("coru");
    }
}

구현한 팀 빌딩 화면:

image.png