@PopTop

Как сделать сохранение в OnClick?

Здравствуйте, извиняюсь что опять к вам обращаюсь за помощью со своим тупым вопросом, я честно долго пытался сделать и гуглил. В общем план был такой, сделать в скрипте SpriteSwapper столько методов OnClick, сколько и кнопок покупок, для каждого метода сделать свой ключ в PlayerPrefs Button1, Button2 и т.д. И через OnClick1 в свойствах кнопки инициализировать каждый отдельный метод. На данный момент пытаюсь сделать так, чтобы при нажатии на кнопку у меня менялся цвет (здесь все работает) и сохранялся цвет для этой кнопки, но у меня меняется цвет при нажатии, затем перезахожу и ко всем кнопкам почему-то применяется disabledSprite и инициализация в инспекторе Button слетает, именно при повторном запуске игры(скрин в альбоме) . В планах к каждой кнопке применить метод покупки, с условием срабатывания только 1 раз, но до этого я еще не дошел.

Так же, я мучаюсь с решением проблемы с тем, что когда мой герой спавмнится через скрипт смены скинов, на нем не инициализируются окно смерти из UI, которое скрыто. Когда у меня все работало без скрипта смены героя, я просто инициализировал public GameObject Lose; и в нужном месте вызывал Lose.SetActive(true); Я почитал, что нужно сделать Lose приватным и вызвать его Lose = GameObject.Find("EndGameLose").GetComponent(); Потом я прочитал, что так просто не вызывается GameObject если он скрыт, поэтому я создал пустой объект в UI и в него вложил EndGameLose и попытался вызвать pustushka.transform.GetChild(0).gameObject.SetActive(true); что тоже не увенчалось успехом.
Скрины все в альбоме https://yapx.ru/v/OC8Iz

public class SpriteSwapper : MonoBehaviour
    {
       public class SpriteSwapper : MonoBehaviour
    {
        public Sprite enabledSprite;
        public Sprite disabledSprite;
        private bool m_swapped = true;
        private bool m_swapped1 = true;
        private bool m_swapped2 = true;
        private Image m_image;
    
        public Button button;

        public void Awake()
        {
            m_image = GetComponent<Image>();
           
        }

        private void Start()
        {
            if (PlayerPrefs.GetInt("Button1") == 1)
            {
                button = this.gameObject.GetComponent<Button>();
                m_image.sprite = disabledSprite;
                //   Debug.Log(PlayerPrefs.GetInt("Button1"));
           
            }

            if (PlayerPrefs.GetInt("Button2") == 1)
            {
                button = this.gameObject.GetComponent<Button>();
                m_image.sprite = disabledSprite;
               // Debug.Log(PlayerPrefs.GetInt("Button1"));
            }
        }

        public void SwapSprite()
        {
            if (m_swapped)
            {
                m_swapped = false;
                m_image.sprite = disabledSprite;

            }
        }

        public void OnClick1()
        {
            if (m_swapped1)
            {
                m_swapped1 = false;
                m_image.sprite = disabledSprite;
                PlayerPrefs.SetInt("Button1", 1);
                Debug.Log(PlayerPrefs.GetInt("Button1"));
            }
        }

        public void OnClick2()
        {
            if (m_swapped2)
            {
                m_swapped2 = false;
                m_image.sprite = disabledSprite;
                PlayerPrefs.SetInt("Button2", 1);
               Debug.Log(PlayerPrefs.GetInt("Button2", 1));
            }
        }
    }


public class ColorSwapper : MonoBehaviour
    {
        public Color enabledColor;
        public Color disabledColor;
        private bool m_swapped = true;
        private bool m_swapped1 = true;
        private Image m_image;
        private Image m_image1;

        private void Awake()
        {
            m_image = GetComponent<Image>();
            m_image1 = GetComponent<Image>();
        }

        public void SwapColor()
        {
            if (m_swapped)
            {
                m_swapped = false;
                m_image.color = disabledColor;
            }
            else
            {
                m_swapped = true;
                m_image.color = enabledColor;
            }
        }
        public void SwapColor1()
        {
            if (m_swapped1)
            {
                m_swapped1 = false;
                m_image1.color = disabledColor;
            }
            else
            {
                m_swapped1 = true;
                m_image1.color = enabledColor;
            }
        }

    }
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
@PopTop Автор вопроса
Я сделал кнопки на которых повесил скрипт Buy, если на него кликнуть и если достаточно денег, то эта кнопка исчезает, только есть небольшая проблема, если это окно заранее открыто, то у меня все хорошо работает, при клике на кнопку она сразу исчезает и при перезаходе в игру все сохранено, но если это окно магазина скрыто и вызывается открытием, то при клике на него кнопки не исчезают, если в игру перезайти, то их уже нет на сцене, к ним применяется сохранение SetActive(false). Я пробовал метод старт воткнуть в OnEnable() и Awake() не помогло. В чем может быть дело? Скрипт висит на камере

public class Buy : MonoBehaviour
{
    public GameObject BuyButton1;
    public GameObject BuyButton2;
    int BuySkin1;
    int BuySkin2;


    private void OnEnable()
    {
        BuySkin1 = PlayerPrefs.GetInt("BuySkin1", 1);
        BuySkin2 = PlayerPrefs.GetInt("BuySkin2", 1);
    }

    void Update()
    {
        if (BuySkin1 == 1)
        {
            BuyButton1.SetActive(true);
        }
        else
        {
            BuyButton1.SetActive(false);
        }

        if (BuySkin2 == 1)
        {
            BuyButton2.SetActive(true);
        }
        else
        {
            BuyButton2.SetActive(false);
        }
    }

    public void BuySkins1()
    {
        if (CoinText.Coin >= 5)
        {
            CoinText.Coin -= 5;
            PlayerPrefs.SetInt("Coins", CoinText.Coin);
            BuySkin1 = 2;
            PlayerPrefs.SetInt("BuySkin1", BuySkin1);
        }
    }

    public void BuySkins2()
    {
        if (CoinText.Coin >= 10)
        {
            CoinText.Coin -= 10;
            PlayerPrefs.SetInt("Coins", CoinText.Coin);
            BuySkin2 = 2;
            PlayerPrefs.SetInt("BuySkin2", BuySkin2);
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы