띄워둔게 스크롤뷰 하나에 목록이래봐야 20개인데 전부 활성화 시켜두면 프레임 절반으로 떨어지네.

특히 걍 띄워둘 때는 그나마 괜찮은데 드래그 하는 순간 10프레임까지 내려감...

스크롤뷰가 원래 이렇게 무겁나?

여러곳에서 써야하는데 벌써 이러니까 겁나네


얘가 스크롤뷰에서 쓰는 코드임.

_infos가 스크롤뷰 개별 오브젝트.


    private GameManager _GameManager;

    private UserData _UserData;

    private Calculate _Calculate;


    public Lobby _Lobby;

    public HotButton _HotButton;


    public GameObject[] _infos { get; private set; }


    public Text _rateText;

    public Transform _groups;

    

    private Image[] _icons;

    private Text[] _levels;

    private Text[] _moneyTexts;

    private Image[] _buttonSprites;

    private Text[] _costTexts;

    private Image[] _costIcons;

    private Text[] _costValues;

    private Image[] _sliders;


    private void Awake()

    {

        GameObject obj = GameObject.FindWithTag("GameManager");

        _GameManager = obj.GetComponent<GameManager>();

        _UserData = _GameManager.GetComponent<UserData>();

        _Calculate = _GameManager.GetComponent<Calculate>();


        DefaultArray();

    }


    private void DefaultArray()

    {

        _infos = new GameObject[GameDef.ArrayGroup[0]];


        _icons = new Image[GameDef.ArrayGroup[0]];

        _levels = new Text[GameDef.ArrayGroup[0]];

        _moneyTexts = new Text[GameDef.ArrayGroup[0]];

        _buttonSprites = new Image[GameDef.ArrayGroup[0]];

        _costTexts = new Text[GameDef.ArrayGroup[0]];

        _costIcons = new Image[GameDef.ArrayGroup[0]];

        _costValues = new Text[GameDef.ArrayGroup[0]];

        _sliders = new Image[GameDef.ArrayGroup[0]];

    }


    public void DefaultSetting()

    {

        for(int i = 0; i < GameDef.ArrayGroup[0]; i++)

        {

            _infos[i] = _groups.transform.GetChild(i).gameObject;


            _icons[i] = _infos[i].transform.GetChild(0).GetChild(0).GetComponent<Image>();

            _levels[i] = _infos[i].transform.GetChild(0).GetChild(1).GetComponent<Text>();

            _moneyTexts[i] = _infos[i].transform.GetChild(1).GetChild(2).GetComponent<Text>();

            _buttonSprites[i] = _infos[i].transform.GetChild(2).GetComponent<Image>();

            _costTexts[i] = _infos[i].transform.GetChild(2).GetChild(0).GetComponent<Text>();

            _costIcons[i] = _infos[i].transform.GetChild(2).GetChild(1).GetComponent<Image>();

            _costValues[i] = _infos[i].transform.GetChild(2).GetChild(2).GetComponent<Text>();

            _sliders[i] = _infos[i].transform.GetChild(3).GetChild(1).GetComponent<Image>();


            Text mainText = _infos[i].transform.GetChild(1).GetChild(0).GetComponent<Text>();

            Text subText = _infos[i].transform.GetChild(1).GetChild(1).GetComponent<Text>();


            mainText.text = LeanLocalization.GetTranslationText("atitle_" + i.ToString("D4"));

            subText.text = LeanLocalization.GetTranslationText("asub_" + i.ToString("D4"));


            Button button = _infos[i].transform.GetChild(2).GetComponent<Button>();

            int a = i;

            button.onClick.AddListener(() => OnClickButton(a));

                        

            DataUpdate(i);


            if (i == 0)

                _infos[i].SetActive(true);

            else if (_UserData._UserALevel[i - 1] > 0)

                _infos[i].SetActive(true);

            else

                _infos[i].SetActive(false);        

        }


        AllDataUpdate();

        RateText();

    }


    public void DataUpdate(int num)

    {

        _levels[num].text = "Lv. " + "<Color=FFFFFF>" + _UserData._UserALevel[num] + "</Color>";


        Units unit = Utilities.ConvertUnit(_GameManager._Money[num]);


        if (num == 0)

            _moneyTexts[num].text = Utilities.TextCombine(unit.Value, unit.Unit) + "/Click";

        else

            _moneyTexts[num].text = Utilities.TextCombine(unit.Value, unit.Unit) + "/s";


        if(_UserData._UserALevel[num] > 4)

            _sliders[num].fillAmount = (_UserData._UserALevel[num] - GameDef.GradeRate[_Calculate.GroupGrade(num) - 1]) / (float)(GameDef.GradeRate[_Calculate.GroupGrade(num)] - GameDef.GradeRate[_Calculate.GroupGrade(num) - 1]);        

        else if(num == 0)

            _sliders[num].fillAmount = (_UserData._UserALevel[num] - 1) / (float)(GameDef.GradeRate[_Calculate.GroupGrade(num)] - 1);

        else

            _sliders[num].fillAmount = _UserData._UserALevel[num] / (float)GameDef.GradeRate[_Calculate.GroupGrade(num)];

    }


    public void AllDataUpdate()

    {

        for(int i = 0; i < GameDef.ArrayGroup[0]; i++)

        {

            Units unit = Utilities.ConvertUnit(_GameManager._Cost[i]);

            _costTexts[i].text = LeanLocalization.GetTranslationText("lobby_0012") + " x" + _GameManager._RateALevel[i].ToString();

            _costValues[i].text = Utilities.TextCombine(Utilities.FloorNumber(unit.Value), unit.Unit);            


            if (_UserData._UserMoney >= _GameManager._Cost[i])

            {

                _buttonSprites[i].sprite = Resources.Load<Sprite>("Sprites/UIs/Lobby_UI_0005");

                _costTexts[i].color = new Color32(245, 245, 245, 255);

                _costIcons[i].color = new Color32(255, 255, 255, 255);

                _costValues[i].color = new Color32(245, 245, 245, 255);

            }

            else

            {

                _buttonSprites[i].sprite = Resources.Load<Sprite>("Sprites/UIs/Lobby_UI_0006");

                _costTexts[i].color = new Color32(180, 180, 180, 255);

                _costIcons[i].color = new Color32(180, 180, 180, 255);

                _costValues[i].color = new Color32(180, 180, 180, 255);

            }

        }

    }


    public void OnClickButton(int num)

    {

        if (_UserData._UserMoney >= _GameManager._Cost[num])

        {

            _UserData.GroupALevelUp(num);

            _GameManager.GroupLevelUpCheck(num);     

            

            DataUpdate(num);

            InfoActive(num);


            _HotButton.ChangeButton();

        }   

    }


    public void InfoActive(int num)

    {

        if (num < GameDef.ArrayGroup[0] - 1)

        {

            if (_UserData._UserALevel[num] > 0 && _infos[num + 1].activeSelf == false)

                _infos[num + 1].SetActive(true);

        }

    }


    public void RateButton()

    {

        _UserData.ChangeRate();

        RateText();


        for(int i = 0; i < GameDef.ArrayGroup[0]; i++)

        {

            _Calculate.CostCalculate(i);

            Units unit = Utilities.ConvertUnit(_GameManager._Cost[i]);

            _costValues[i].text = Utilities.TextCombine(Utilities.FloorNumber(unit.Value), unit.Unit);

        }


        AllDataUpdate();

    }


    public void RateText()

    {

        switch (_UserData._CostRate)

        {

            case 0:

                _rateText.text = "x1";

                break;


            case 1:

                _rateText.text = "x10";

                break;


            case 2:

                _rateText.text = "x100";

                break;


            case 3:

                _rateText.text = "xNext";

                break;


            case 4:

                _rateText.text = "xMax";

                break;


            default:

                Debug.Log("type값 오류");

                break;

        }

    }



코드로 올라가질 않으니까 영 그렇네.

혹시 짐작가는거 있으면 얘기 해주면 고맙게 배우겠음.