1. Отвечает за установку "OS" (Банально переносит Text.text на другой Text)
2. Отвечает за всплывающее окно (Как MessageBox) на котором прогресс бар симулирует установку OS
Всё бы ничего, но мне нужно передать в 1 скрипт return true/false. Типа (Установилась/Не установилась) чтобы потом решать,
переносить Text.text на другой Text или нет! В этом то и является загвоздка. Перепробовал очень много способов.
Сначала из 1 скрипта вызывался метод а метод корутину и вроде как работает но реализовать return как с метода так и
с корутины один хрен не получилось. Потом начал натыкивать кучу bool переменных и циклов для получения хоть какого то
результата. Тоже ничего путнего не вышло( потом узнал что корутина это и есть метод. Я давай заменять старый метод одной
корутиной на ввесь скрипт. Вариант хороший. Но ***** вызвать корутину вызвал... но теперь 1 скрипт жалуется что это ну не как
не bool'евая((( Пока что всё пришло к такому виду:
Скрипт номер 1
Синтаксис:
Используется csharp
Class InventoryTweek2
public void Use()
{
MessageBox message = MainCamera.GetComponent<MessageBox>(); //Объявил 2 скрипт
if (message.StartCoroutine(message.Tick()))
{
//Это перенос Text.text на другой Text. Не обращайте на него внимания. В моей проблеме роли не играет.
Config cfg = MainCamera.GetComponent<Config>();
cfg.SYSTEM.text = choosen.text;
choosen.text = "None";
thisButton.GetComponent<Text>().text = "None";
}
}
public void Use()
{
MessageBox message = MainCamera.GetComponent<MessageBox>(); //Объявил 2 скрипт
if (message.StartCoroutine(message.Tick()))
{
//Это перенос Text.text на другой Text. Не обращайте на него внимания. В моей проблеме роли не играет.
Config cfg = MainCamera.GetComponent<Config>();
cfg.SYSTEM.text = choosen.text;
choosen.text = "None";
thisButton.GetComponent<Text>().text = "None";
}
}
Скрипт номер 2
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MessageBox : MonoBehaviour
{
public Image parent;
public Slider slider;
public Text status;
//public bool isNotCancelled; Те переменные которые я понатыкал. Тоже уже никакой роли не играют
//public bool isFinished;
//public bool inProgress;
public string status_name;
public void Start()
{
parent.gameObject.SetActive(false); //Это команда скрывает или показывает MessageBox
}
public IEnumerator Tick()
{
parent.gameObject.SetActive(true); //Параметры MessageBox`а при старте. В проблеме роли не играет
status.text = status_name;
//isNotCancelled = true;
//isFinished = false;
//inProgress = true;
slider.value = 0;
while (isNotCancelled) //цикл который заполняет прогресс бар и возвращает true/false
{
yield return new WaitForSeconds(0.05f);
if (slider.value >= 100)
{
yield return true;
break;
}
else slider.value++;
}
yield return false;
}
public void Button() //Просто кнопка для отмены процесса (не реализовано)
{
inProgress = false;
isNotCancelled = false;
}
//СТАРЫЕ НАРАБОТКИ (ПО СУТИ МУСОР МОЖНО НЕ СМОТРЕТЬ!!)
/*public bool StartProgress(string status_name)
{
Debug.Log("StartProgress is started");
parent.gameObject.SetActive(true);
status.text = status_name;
isNotCancelled = true;
isFinished = false;
inProgress = true;
slider.value = 0;
StartCoroutine(Tick());
while (isNotCancelled) {
if (!inProgress)
{
if (isFinished)
{
Debug.Log("StartProgress is Finished true");
parent.gameObject.SetActive(false);
return true;
}
else
{
Debug.Log("StartProgress is Finished false");
parent.gameObject.SetActive(false);
return false;
}
}
}
return true;
}
IEnumerator Tick()
{
while (isNotCancelled)
{
yield return new WaitForSeconds(0.05f);
if (slider.value >= 100)
{
inProgress = false;
isFinished = true;
break;
}
else slider.value++;
Debug.Log(slider.value);
}
inProgress = false;
isFinished = false;
}
public void Button()
{
inProgress = false;
isNotCancelled = false;
}*/
}
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MessageBox : MonoBehaviour
{
public Image parent;
public Slider slider;
public Text status;
//public bool isNotCancelled; Те переменные которые я понатыкал. Тоже уже никакой роли не играют
//public bool isFinished;
//public bool inProgress;
public string status_name;
public void Start()
{
parent.gameObject.SetActive(false); //Это команда скрывает или показывает MessageBox
}
public IEnumerator Tick()
{
parent.gameObject.SetActive(true); //Параметры MessageBox`а при старте. В проблеме роли не играет
status.text = status_name;
//isNotCancelled = true;
//isFinished = false;
//inProgress = true;
slider.value = 0;
while (isNotCancelled) //цикл который заполняет прогресс бар и возвращает true/false
{
yield return new WaitForSeconds(0.05f);
if (slider.value >= 100)
{
yield return true;
break;
}
else slider.value++;
}
yield return false;
}
public void Button() //Просто кнопка для отмены процесса (не реализовано)
{
inProgress = false;
isNotCancelled = false;
}
//СТАРЫЕ НАРАБОТКИ (ПО СУТИ МУСОР МОЖНО НЕ СМОТРЕТЬ!!)
/*public bool StartProgress(string status_name)
{
Debug.Log("StartProgress is started");
parent.gameObject.SetActive(true);
status.text = status_name;
isNotCancelled = true;
isFinished = false;
inProgress = true;
slider.value = 0;
StartCoroutine(Tick());
while (isNotCancelled) {
if (!inProgress)
{
if (isFinished)
{
Debug.Log("StartProgress is Finished true");
parent.gameObject.SetActive(false);
return true;
}
else
{
Debug.Log("StartProgress is Finished false");
parent.gameObject.SetActive(false);
return false;
}
}
}
return true;
}
IEnumerator Tick()
{
while (isNotCancelled)
{
yield return new WaitForSeconds(0.05f);
if (slider.value >= 100)
{
inProgress = false;
isFinished = true;
break;
}
else slider.value++;
Debug.Log(slider.value);
}
inProgress = false;
isFinished = false;
}
public void Button()
{
inProgress = false;
isNotCancelled = false;
}*/
}
Заранее спасибо тем людам которые откликнутся на помощь!