Получение/изменение значения ползунка из другого скрипта

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Получение/изменение значения ползунка из другого скрипта

Сообщение Otto61 19 апр 2021, 21:50

На сцене несколько генераторов, у них один UI на всех. Информация передается на UI в тот момент, когда один из генераторов выбран. В UI есть ползунок, который отвечает за мощность генератора. Ползунок берёт значение из сохранения, соответственно, менять его нельзя, пока идет передача. Что делать?
Аватара пользователя
Otto61
UNец
 
Сообщения: 41
Зарегистрирован: 05 июн 2019, 16:25

Re: Получение/изменение значения ползунка из другого скрипта

Сообщение Alkos26Rus 19 апр 2021, 22:22

Он что у тебя в реальном времени берет данные из сохранения?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Получение/изменение значения ползунка из другого скрипта

Сообщение Otto61 19 апр 2021, 23:42

Alkos26Rus писал(а):Он что у тебя в реальном времени берет данные из сохранения?

Да. А данные передает на UI при выборе.
Изображение

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


public class Generator : MonoBehaviour
{
    public int id;

    public Slider sliderOil, sliderFuel, sliderOverheat, sliderPower;

    public Text mainContent, mainButton, mainName;

    public bool isSelected = false;

    public Button button;

    public GameObject RigCamera, ToolTip;

    void Start()
    {
    }

    void Update()
    {
        if (isSelected == true)
        {
            GeneratorInfo();
        }
        GeneratorDirection();
    }
    void GeneratorDirection()
    {
        if (SaveData.current.mainprofile.generatorsList[id].isEnabled == true && SaveData.current.mainprofile.generatorsList[id].fuel > 0 && SaveData.current.mainprofile.generatorsList[id].oil > 0 && SaveData.current.mainprofile.generatorsList[id].condition > 0)
        {
            SaveData.current.mainprofile.generatorsList[id].power = 500 * SaveData.current.mainprofile.generatorsList[id].wpower / 100f;
            SaveData.current.mainprofile.generatorsList[id].fuel -= 0.00001f * SaveData.current.mainprofile.generatorsList[id].power;
            SaveData.current.mainprofile.generatorsList[id].oil -= 0.0005f;
            SaveData.current.mainprofile.generatorsList[id].condition -= 0.0001f;
            SaveData.current.mainprofile.generatorsList[id].overheat += 0.1f;
        }
        if (SaveData.current.mainprofile.generatorsList[id].fuel < 0 || SaveData.current.mainprofile.generatorsList[id].oil < 0 || SaveData.current.mainprofile.generatorsList[id].overheat > 99 || SaveData.current.mainprofile.generatorsList[id].condition < 1)
        {
            SaveData.current.mainprofile.generatorsList[id].isEnabled = false;
            SaveData.current.mainprofile.generatorsList[id].power = 0;
            SaveData.current.mainprofile.generatorsList[id].wpower = 0;
        }
        if (SaveData.current.mainprofile.generatorsList[id].isCooled == true)
        {
            if (SaveData.current.mainprofile.generatorsList[id].overheat > 0.1f)
            {
                SaveData.current.mainprofile.generatorsList[id].overheat -= 0.2f;
            }
        }
    }
    public void GeneratorWrap()
    {
        SaveData.current.mainprofile.generatorsList[id].isEnabled = !SaveData.current.mainprofile.generatorsList[id].isEnabled;
    }
    void OnMouseUp()
    {
        isSelected = true;
        ToolTip.SetActive(true);
    }
    void GeneratorInfo()
    {
        mainContent.text = "Status: " + SaveData.current.mainprofile.generatorsList[id].mainStatus + "\nLoad: " + SaveData.current.mainprofile.generatorsList[id].wpower.ToString("F1") + "%\nPower: " + SaveData.current.mainprofile.generatorsList[id].power.ToString("F1") + " kW/h\nCondition: " + SaveData.current.mainprofile.generatorsList[id].condition.ToString("F1") + "%\nOverheat: " + SaveData.current.mainprofile.generatorsList[id].overheat.ToString("F1") + "%\nFuel: " + SaveData.current.mainprofile.generatorsList[id].fuel.ToString("F1") + "L\nOil: " + SaveData.current.mainprofile.generatorsList[id].oil.ToString("F1") + "L";
        mainName.text = SaveData.current.mainprofile.generatorsList[id].name;
        sliderOil.value = SaveData.current.mainprofile.generatorsList[id].oil;
        sliderFuel.value = SaveData.current.mainprofile.generatorsList[id].fuel;
        sliderPower.value = SaveData.current.mainprofile.generatorsList[id].wpower;
        sliderOverheat.value = SaveData.current.mainprofile.generatorsList[id].overheat;

        button.GetComponent<Button>().onClick.AddListener(() => GeneratorWrap());

        RigCamera.GetComponent<CameraControl>().enabled = false;

        if (SaveData.current.mainprofile.generatorsList[id].isEnabled == true)
        {
            SaveData.current.mainprofile.generatorsList[id].mainStatus = "Online";
            button.GetComponentInChildren<Text>().text = "Stop";
        }
        else
        {
            SaveData.current.mainprofile.generatorsList[id].mainStatus = "Offline";
            button.GetComponentInChildren<Text>().text = "Start";
        }
    }
}
 
Аватара пользователя
Otto61
UNец
 
Сообщения: 41
Зарегистрирован: 05 июн 2019, 16:25

Re: Получение/изменение значения ползунка из другого скрипта

Сообщение Alkos26Rus 20 апр 2021, 00:00

Когда выбираешь генератор передавай значение ползунку один раз, а в Update уже наоборот присваивай своей переменной значение из ползунка

Например:
Синтаксис:
Используется csharp
    void OnMouseUp()
    {
        isSelected = true;
        ToolTip.SetActive(true);
     
        sliderPower.value = SaveData.current.mainprofile.generatorsList[id].wpower;

    }


    void GeneratorInfo()
    {
        mainContent.text = "Status: " + SaveData.current.mainprofile.generatorsList[id].mainStatus + "\nLoad: " + SaveData.current.mainprofile.generatorsList[id].wpower.ToString("F1") + "%\nPower: " + SaveData.current.mainprofile.generatorsList[id].power.ToString("F1") + " kW/h\nCondition: " + SaveData.current.mainprofile.generatorsList[id].condition.ToString("F1") + "%\nOverheat: " + SaveData.current.mainprofile.generatorsList[id].overheat.ToString("F1") + "%\nFuel: " + SaveData.current.mainprofile.generatorsList[id].fuel.ToString("F1") + "L\nOil: " + SaveData.current.mainprofile.generatorsList[id].oil.ToString("F1") + "L";
        mainName.text = SaveData.current.mainprofile.generatorsList[id].name;
        sliderOil.value = SaveData.current.mainprofile.generatorsList[id].oil;
        sliderFuel.value = SaveData.current.mainprofile.generatorsList[id].fuel;
        sliderOverheat.value = SaveData.current.mainprofile.generatorsList[id].overheat;

        SaveData.current.mainprofile.generatorsList[id].wpower = sliderPower.value;

 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Получение/изменение значения ползунка из другого скрипта

Сообщение Otto61 20 апр 2021, 00:38

Alkos26Rus писал(а):Когда выбираешь генератор передавай значение ползунку один раз, а в Update уже наоборот присваивай своей переменной значение из ползунка

Например:
Синтаксис:
Используется csharp
    void OnMouseUp()
    {
        isSelected = true;
        ToolTip.SetActive(true);
     
        sliderPower.value = SaveData.current.mainprofile.generatorsList[id].wpower;

    }


    void GeneratorInfo()
    {
        mainContent.text = "Status: " + SaveData.current.mainprofile.generatorsList[id].mainStatus + "\nLoad: " + SaveData.current.mainprofile.generatorsList[id].wpower.ToString("F1") + "%\nPower: " + SaveData.current.mainprofile.generatorsList[id].power.ToString("F1") + " kW/h\nCondition: " + SaveData.current.mainprofile.generatorsList[id].condition.ToString("F1") + "%\nOverheat: " + SaveData.current.mainprofile.generatorsList[id].overheat.ToString("F1") + "%\nFuel: " + SaveData.current.mainprofile.generatorsList[id].fuel.ToString("F1") + "L\nOil: " + SaveData.current.mainprofile.generatorsList[id].oil.ToString("F1") + "L";
        mainName.text = SaveData.current.mainprofile.generatorsList[id].name;
        sliderOil.value = SaveData.current.mainprofile.generatorsList[id].oil;
        sliderFuel.value = SaveData.current.mainprofile.generatorsList[id].fuel;
        sliderOverheat.value = SaveData.current.mainprofile.generatorsList[id].overheat;

        SaveData.current.mainprofile.generatorsList[id].wpower = sliderPower.value;

 

Вроде работает, спасибо большое. Пытался что такое сделать, только не додумался в OnMouseUp засунуть.
Аватара пользователя
Otto61
UNец
 
Сообщения: 41
Зарегистрирован: 05 июн 2019, 16:25


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 23