меню

Программирование для iPhone & Android

меню

Сообщение andrej40000 17 июн 2020, 00:10

делал меню уровней по видео но у меня уровни все равно всегда открыты может в скрипте как то не так написал?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Chose_LvL : MonoBehaviour
{
        public Button level2B;
        public Button level3B;
        public Button level4B;
        public Button level5B;
        int levelComplete;
        //int levelFaled;
        public AudioSource audioSource;

        void start()
        {
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
                //levelFaled = PlayerPrefs.GetInt("LevelFaled");
                audioSource = GetComponent<AudioSource>();
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;

                switch (levelComplete)
                {
                case 1:
                        level2B.interactable = true;
                        break;
                case 2:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        break;
                case 3:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        break;
                case 4:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        level5B.interactable = true;
                        break;
                }
        }

        public void LoadTo(int level)
        {
                if (audioSource.isPlaying)
                {
                        SceneManager.LoadScene(level);
                }
        }
        public void Reset()
        {
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                PlayerPrefs.DeleteAll();
        }
}
ресет работает.
Я еще хотел сделать чтобы по кнопке производился звук и пока он полностью не проиграет сцена не загружалась. тоже не понял как делать :-??
спасибо всем кто откликнется
и еще скрипты уровней
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NextLevel : MonoBehaviour
{
        public GameObject WinMenu;

        private void OnTriggerEnter(Collider collision)
        {
                WinMenu.SetActive(true);
        }
}
 

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class WinMenu : MonoBehaviour
{
        public void NextLevel()
        {
                LevelController.instanse.isEndGame();
        }
}
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: меню

Сообщение erora 17 июн 2020, 20:17

Не видно метода PlayerPrefs.SetInt("LevelComplete");. Поэтому я склоняюсь к тому, что у вас нету этой переменной в реестре, поэтому вы оттуда ее и не достанете, а так как у вас переменная int levelComplete в начале не назначена, то и в старте она не сработает. Поставьте int levelComplete = 1, или используйте в методе Start проверку с помощью HasKey, или в Start попробуйте ее загнать в реестр сразу - levelComplete = PlayerPrefs.GetInt("LevelComplete", 1);.
Аватара пользователя
erora
UNец
 
Сообщения: 42
Зарегистрирован: 11 июн 2020, 15:15

Re: меню

Сообщение andrej40000 18 июн 2020, 00:07

erora писал(а):Не видно метода PlayerPrefs.SetInt("LevelComplete");. Поэтому я склоняюсь к тому, что у вас нету этой переменной в реестре, поэтому вы оттуда ее и не достанете, а так как у вас переменная int levelComplete в начале не назначена, то и в старте она не сработает. Поставьте int levelComplete = 1, или используйте в методе Start проверку с помощью HasKey, или в Start попробуйте ее загнать в реестр сразу - levelComplete = PlayerPrefs.GetInt("LevelComplete", 1);.

попробовал не помогло у меня подозрения что switch и case не работают как надо все cace как будто выполняются разом и
используйте в методе Start проверку с помощью HasKey
я не знаю как сделатью
я забыл так же про еще код
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelController : MonoBehaviour
{
        public static LevelController instanse = null;
        int sceneIndex;
        int levelComplete;



    void Start()
    {
                if (instanse == null)
                {
                        instanse = this;
                }
                sceneIndex = SceneManager.GetActiveScene().buildIndex;
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
    }

        public void isEndGame()
        {
                if (sceneIndex == 5)
                {
                        Invoke("LoadMainMenu", 1f);
                }      
            else
        {
                if (levelComplete < sceneIndex)
                        PlayerPrefs.SetInt("LevelComlete", sceneIndex);
                Invoke("NextLevel", 1f);
        }
}

        void NextLevel()
        {
                SceneManager.LoadScene(sceneIndex + 1);
        }
        void LoadMainMenu()
        {
                SceneManager.LoadScene("MainMenu");
        }
}
 
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: меню

Сообщение erora 18 июн 2020, 15:18

Незнаю на каких сценах у вас скрипты раскиданы, и как у вас сцены устроены. Попробуйте в скрипте Chose_LvL в Start посмотреть какую сцену вы получаете из PlayerPrefs.

Синтаксис:
Используется csharp
void start()
        {
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
                Debug.Log(levelComplete);



Думаю что вы передаете 0-ую сцену.
Аватара пользователя
erora
UNец
 
Сообщения: 42
Зарегистрирован: 11 июн 2020, 15:15

Re: меню

Сообщение andrej40000 19 июн 2020, 01:12

erora писал(а):Незнаю на каких сценах у вас скрипты раскиданы, и как у вас сцены устроены. Попробуйте в скрипте Chose_LvL в Start посмотреть какую сцену вы получаете из PlayerPrefs.

Синтаксис:
Используется csharp
void start()
        {
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
                Debug.Log(levelComplete);



Думаю что вы передаете 0-ую сцену.

не знаю почему, но сообщений никаких не выводит
мне в принципе не жалко отправить сюда свой проект https://yadi.sk/d/-snQvI42yJoXAQ потому что он не оригинальный и я просто хочу научится писать скрипты
так что вот ссылка на проект (почему-то очень большая папка игры получилась так что нужно >1гб если не проблема то так и оставлю если все же много то могу ещё сборку с вырезанными ассетами.
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: меню

Сообщение Jarico 19 июн 2020, 10:26

andrej40000 писал(а):
erora писал(а):так что вот ссылка на проект (почему-то очень большая папка игры получилась так что нужно >1гб если не проблема то так и оставлю если все же много то могу ещё сборку с вырезанными ассетами.


Ну ты и крейзи :)) :)) Загрузил проект со всеми билдами и папкой для кэша

Архивируй папки Assets, ProjectSettings и Packages
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: меню

Сообщение Alex5 19 июн 2020, 16:01

Неделя открытых исходников на форуме. За неделю уже вторые :)
А что за "оригинал" был?
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

Re: меню

Сообщение erora 19 июн 2020, 20:16

Скачал, посмотрел, разобрался. Скажу одно "НУ ОЧЕНЬ МНОГО СКРИПТОВ в такой игре". Короче одним словом. Очень много PlayerPrefs.SetInt("LevelComplete") в разных кодах (JoystickPlayerExample, LevelController и другие). Вам надо пройтись по всем скриптам и поубирать все PlayerPrefs.SetInt("LevelComplete") во всех кодах и сделать так.

в cкрипте LevelController

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelController : MonoBehaviour
{
        public static LevelController instanse = null;
        int sceneIndex;
        int levelComplete;



    void Start()
    {
                if (instanse == null)
                {
                        instanse = this;
                }
                sceneIndex = SceneManager.GetActiveScene().buildIndex;
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
    }

        public void isEndGame()
        {
                if (sceneIndex == 5)
                {
                        Invoke("LoadMainMenu", 1f);
                }      
            else
        {
                if (levelComplete < sceneIndex)
                        PlayerPrefs.SetInt("LevelComlete", sceneIndex+1);
PlayerPrefs.Save();
                Invoke("NextLevel", 1f);
        }
}

        void NextLevel()
        {
                SceneManager.LoadScene(sceneIndex + 1);
        }
        void LoadMainMenu()
        {
                SceneManager.LoadScene("MainMenu");
        }
}


в скрипте Chose_LvL

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Chose_LvL : MonoBehaviour
{
        public Button level2B;
        public Button level3B;
        public Button level4B;
        public Button level5B;
        int levelComplete = 0;
        //int levelFaled;
        public AudioSource audioSource;

        void Start()
        {
                if (PlayerPrefs.HasKey("LevelComplete"))
                {
                        levelComplete = PlayerPrefs.GetInt("LevelComplete");
                }
               
                //levelFaled = PlayerPrefs.GetInt("LevelFaled");
                audioSource = GetComponent<AudioSource>();
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                Debug.Log(levelComplete);

                switch (levelComplete)
                {
                        case 1:
                        level2B.interactable = true;
                        break;
                case 2:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        break;
                case 3:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        break;
                case 4:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        level5B.interactable = true;
                        break;
                }
        }

        public void LoadTo(int level)
        {
                if (audioSource.isPlaying)
                {
                        SceneManager.LoadScene(level);
                }
        }
        public void Reset()
        {
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                PlayerPrefs.DeleteAll();
        }
}


в скрипте GameMenu

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameMenu : MonoBehaviour
{
        public void Back()
        {
                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
        }
        public void BBack()
        {
                PlayerPrefs.SetInt("LevelComplete", SceneManager.GetActiveScene().buildIndex);
                PlayerPrefs.Save();
                SceneManager.LoadScene("MainMenu");
        }
}
Аватара пользователя
erora
UNец
 
Сообщения: 42
Зарегистрирован: 11 июн 2020, 15:15

Re: меню

Сообщение andrej40000 20 июн 2020, 20:21

erora писал(а):Скачал, посмотрел, разобрался. Скажу одно "НУ ОЧЕНЬ МНОГО СКРИПТОВ в такой игре". Короче одним словом. Очень много PlayerPrefs.SetInt("LevelComplete") в разных кодах (JoystickPlayerExample, LevelController и другие). Вам надо пройтись по всем скриптам и поубирать все PlayerPrefs.SetInt("LevelComplete") во всех кодах и сделать так.

в cкрипте LevelController

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelController : MonoBehaviour
{
        public static LevelController instanse = null;
        int sceneIndex;
        int levelComplete;



    void Start()
    {
                if (instanse == null)
                {
                        instanse = this;
                }
                sceneIndex = SceneManager.GetActiveScene().buildIndex;
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
    }

        public void isEndGame()
        {
                if (sceneIndex == 5)
                {
                        Invoke("LoadMainMenu", 1f);
                }      
            else
        {
                if (levelComplete < sceneIndex)
                        PlayerPrefs.SetInt("LevelComlete", sceneIndex+1);
PlayerPrefs.Save();
                Invoke("NextLevel", 1f);
        }
}

        void NextLevel()
        {
                SceneManager.LoadScene(sceneIndex + 1);
        }
        void LoadMainMenu()
        {
                SceneManager.LoadScene("MainMenu");
        }
}


в скрипте Chose_LvL

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Chose_LvL : MonoBehaviour
{
        public Button level2B;
        public Button level3B;
        public Button level4B;
        public Button level5B;
        int levelComplete = 0;
        //int levelFaled;
        public AudioSource audioSource;

        void Start()
        {
                if (PlayerPrefs.HasKey("LevelComplete"))
                {
                        levelComplete = PlayerPrefs.GetInt("LevelComplete");
                }
               
                //levelFaled = PlayerPrefs.GetInt("LevelFaled");
                audioSource = GetComponent<AudioSource>();
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                Debug.Log(levelComplete);

                switch (levelComplete)
                {
                        case 1:
                        level2B.interactable = true;
                        break;
                case 2:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        break;
                case 3:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        break;
                case 4:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        level5B.interactable = true;
                        break;
                }
        }

        public void LoadTo(int level)
        {
                if (audioSource.isPlaying)
                {
                        SceneManager.LoadScene(level);
                }
        }
        public void Reset()
        {
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                PlayerPrefs.DeleteAll();
        }
}


в скрипте GameMenu

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameMenu : MonoBehaviour
{
        public void Back()
        {
                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
        }
        public void BBack()
        {
                PlayerPrefs.SetInt("LevelComplete", SceneManager.GetActiveScene().buildIndex);
                PlayerPrefs.Save();
                SceneManager.LoadScene("MainMenu");
        }
}

ОГРОМНЕЙШЕЕ СПАСИБО! сам до этого не умел нормально пользоваться playerprefs теперь вроде начинаю понимать сделал как вы сказали и все стало как надо.И еще раз спасибо что уделили моему вопросу свое время!
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: меню

Сообщение andrej40000 20 июн 2020, 21:07

andrej40000 писал(а):
erora писал(а):Скачал, посмотрел, разобрался. Скажу одно "НУ ОЧЕНЬ МНОГО СКРИПТОВ в такой игре". Короче одним словом. Очень много PlayerPrefs.SetInt("LevelComplete") в разных кодах (JoystickPlayerExample, LevelController и другие). Вам надо пройтись по всем скриптам и поубирать все PlayerPrefs.SetInt("LevelComplete") во всех кодах и сделать так.

в cкрипте LevelController

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelController : MonoBehaviour
{
        public static LevelController instanse = null;
        int sceneIndex;
        int levelComplete;



    void Start()
    {
                if (instanse == null)
                {
                        instanse = this;
                }
                sceneIndex = SceneManager.GetActiveScene().buildIndex;
                levelComplete = PlayerPrefs.GetInt("LevelComplete");
    }

        public void isEndGame()
        {
                if (sceneIndex == 5)
                {
                        Invoke("LoadMainMenu", 1f);
                }      
            else
        {
                if (levelComplete < sceneIndex)
                        PlayerPrefs.SetInt("LevelComlete", sceneIndex+1);
PlayerPrefs.Save();
                Invoke("NextLevel", 1f);
        }
}

        void NextLevel()
        {
                SceneManager.LoadScene(sceneIndex + 1);
        }
        void LoadMainMenu()
        {
                SceneManager.LoadScene("MainMenu");
        }
}


в скрипте Chose_LvL

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Chose_LvL : MonoBehaviour
{
        public Button level2B;
        public Button level3B;
        public Button level4B;
        public Button level5B;
        int levelComplete = 0;
        //int levelFaled;
        public AudioSource audioSource;

        void Start()
        {
                if (PlayerPrefs.HasKey("LevelComplete"))
                {
                        levelComplete = PlayerPrefs.GetInt("LevelComplete");
                }
               
                //levelFaled = PlayerPrefs.GetInt("LevelFaled");
                audioSource = GetComponent<AudioSource>();
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                Debug.Log(levelComplete);

                switch (levelComplete)
                {
                        case 1:
                        level2B.interactable = true;
                        break;
                case 2:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        break;
                case 3:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        break;
                case 4:
                        level2B.interactable = true;
                        level3B.interactable = true;
                        level4B.interactable = true;
                        level5B.interactable = true;
                        break;
                }
        }

        public void LoadTo(int level)
        {
                if (audioSource.isPlaying)
                {
                        SceneManager.LoadScene(level);
                }
        }
        public void Reset()
        {
                level2B.interactable = false;
                level3B.interactable = false;
                level4B.interactable = false;
                level5B.interactable = false;
                PlayerPrefs.DeleteAll();
        }
}


в скрипте GameMenu

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameMenu : MonoBehaviour
{
        public void Back()
        {
                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
        }
        public void BBack()
        {
                PlayerPrefs.SetInt("LevelComplete", SceneManager.GetActiveScene().buildIndex);
                PlayerPrefs.Save();
                SceneManager.LoadScene("MainMenu");
        }
}

ОГРОМНЕЙШЕЕ СПАСИБО! сам до этого не умел нормально пользоваться playerprefs теперь вроде начинаю понимать сделал как вы сказали и все стало как надо.И еще раз спасибо что уделили моему вопросу свое время!
Ой поторопился теперь не подгружает сцены с уровнями по кнопкам и если начинать играть не с меню а с уровней то ничего не открывается проблема приняла полностью обратный характер))
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14


Вернуться в iPhone & Android

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2