Отключение иконки и клавиши Esc.

Программирование на Юнити.

Отключение иконки и клавиши Esc.

Сообщение Mari4og 16 янв 2019, 11:03

Добрый день. Есть персонаж, который в сцене №3 берёт предмет «рычаг» (необходимый в сцене №1), на котором висит скрипт «LeverUpSave».
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class LeverUpSave : MonoBehaviour
{
    bool pickedUp;
        public GameObject TextLeverUp;   //иконка "рычага"
       
       
        void Start()
        {
                if (pickedUp = SaveSystem.GetBool("bool") == true)
                {
                        TextLeverUp.SetActive (true);          
                }
                else
                {
                        TextLeverUp.SetActive (false);                 
                }
        }
       
        void OnTriggerEnter (Collider other)
        {
                if (other.gameObject.tag == "Player")
                {
                        pickedUp = true;
                        SaveSystem.SetBool("bool", pickedUp);
            AudioManager.Instance.PlayAudio("Key_Lever");
            TextLeverUp.SetActive (true);                      
            Destroy(gameObject, 0.5f);            
        }
        }        
}

В следствии чего активируется иконка «рычага», данное событие сохраняется, и префаб «рычага» уничтожается.
В сценах №1-2 также есть иконки «рычага» и «менеджер рычага»)) со скриптом «LeverTextGO»,
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class LeverTextGO : MonoBehaviour
{
    bool pickedUp;
    bool turnOn;       
    public GameObject TextLeverUp;     
       
        void Start()  
        {
                if ((turnOn = SaveSystem.GetBool("bool") == true) || (pickedUp = SaveSystem.GetBool("bool") == false))
                {
                        TextLeverUp.SetActive (false);
                }
                if (pickedUp = SaveSystem.GetBool("bool") == true)
                {
                        TextLeverUp.SetActive (true);          
                }
        }
}

благодаря которому, если персонаж взял рычаг, то иконка активна, а после того, как донёс до места и положил куда надо – должна отключаться.
В сцене №1 есть триггер (точнее два, первый активирует надпись, что тут, мол, нужен «рычаг») со скриптом «LeverTurnOn»
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class LeverTurnOn : MonoBehaviour
{

    bool pickedUp;
    bool turnOn;
    bool isGameOver;
    public GameObject TextKeyUp; // иконка рычага
        public GameObject TriggTextLever;  // старое сообщение на UI о рычаге
    public GameObject TriggLever;  // старый триггер на рычаге
    public GameObject Lever_GO;  // старый агрегат "рычаг"
        public GameObject LeverN_GO;  // новый агрегат "рычаг"
        public GameObject PanelFin;  // панель на UI о завершении игры
    public GameObject PausePenel;


    void OnTriggerEnter (Collider other)
        {
                if (other.gameObject.tag == "Player")
                {
                        if (pickedUp = SaveSystem.GetBool("bool") == true)
                        {
                                AudioManager.Instance.PlayAudio("Key_Lever");
                                TextKeyUp.SetActive (false);
                TriggLever.SetActive (false);
                Lever_GO.SetActive(false);
                TriggTextLever.SetActive (false);                              
                               
                                LeverN_GO.SetActive (true);
                turnOn = true;
                pickedUp = false;
                SaveSystem.SetBool("bool", turnOn);
                SaveSystem.SaveToDisk();
                Debug.Log("Save leverUp to disk.");
            }
            if (pickedUp = SaveSystem.GetBool("bool") == false)
            {
                Lever_GO.SetActive(true);
                TriggTextLever.SetActive(true);
                LeverN_GO.SetActive(false);
            }                  
        }
        }
       
        void OnTriggerExit(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
                        if (pickedUp = SaveSystem.GetBool("bool") == true)
                        {
                PausePenel.SetActive(false);
                PanelFin.SetActive (true);
                isGameOver = true;
                Cursor.visible = true;
                Time.timeScale = 0;
                AudioManager.Instance.PlayAudio("PanelFinSound");                              
                        }
                        if (pickedUp = SaveSystem.GetBool("bool") == false)
                        {
                                PanelFin.SetActive (false);
                        }    
        }
    }    
}

- который отключает первый триггер, отключает иконку, активирует принесённый рычаг, сохраняет это событие, а на выходе из триггера – активирует UI панель «PanelFin», с кнопками «Quit» и «Menu».
Первая проблема в том, что, если перезайти в сцену 1 или 2, то иконка «рычага» опять активна – но я уже положил рычаг на место и она должна появиться (по задумке), только если я снова возьму рычаг в сцене №3.
А вторая проблема в том, что я не знаю, как правильно отключить кнопку Esc (которой управляет скрипт «SumPause»), на момент активации панели «PanelFin» с кнопками «Quit» и «Menu». Вот «SumPause»:
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]
/// <summary>Singleton class for controlling pause functions.</summary>
public class SumPause : MonoBehaviour {

    // Event managers
    public delegate void PauseAction(bool paused);
    public static event PauseAction pauseEvent;
    public bool isGameOver;

    // Variables set via inspector
    [SerializeField]
    bool useEvent = false, detectEscapeKey = true;
    [SerializeField]
    Sprite pausedSprite, playingSprite;

    // Link to button's image
    Image image;

    static bool status = false;
    /// <summary>
    /// Sets/Returns current pause state (true for paused, false for normal)
    /// </summary>
    public static bool Status {
        get { return status; }
        set {
            status = value;
            Debug.Log("Pause status set to " + status.ToString());

            OnChange();

            // Change image to the proper sprite if everything is set
            if (CheckLinks())
                instance.image.sprite = status ? instance.pausedSprite : instance.playingSprite;
            else
                Debug.LogError("Links missing on SumPause component. Please check the sumPauseButton object for missing references.");

            // Notify other objects of change
            if (instance.useEvent && pauseEvent != null)
                pauseEvent(status);              
        }
    }

    // Instance used for singleton
    public static SumPause instance;

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

    void Start ()
    {        
        // Ensure singleton
        if (SumPause.instance == null)
            SumPause.instance = this;
        else
            Destroy(this);
    }

    void Update()
    {
        // Listen for escape key and pause if needed
        if (detectEscapeKey && Input.GetKeyDown(KeyCode.Escape))
         TogglePause();          
    }
    /// <summary>
    /// Flips the current pause status. Called from the attached button in
    /// the inspector.
    /// </summary>
    public void TogglePause ()
    {
        Status = !Status; // Flip current status
    }

    /// <summary>Checks if all links are properly connected</summary>
    /// <returns>False means links are missing</returns>
    static bool CheckLinks () {
        return (instance.image != null && instance.playingSprite != null && instance.pausedSprite != null);
    }

    /// <summary>This is what we want to do when the game is paused or unpaused.</summary>
    static void OnChange() {
        if(status) {
            // What to do when paused
            Time.timeScale = 0; // Set game speed to 0
            Cursor.visible = true;
        }
        else {
            // What to do when unpaused
            Time.timeScale = 1; // Resume normal game speed
            Cursor.visible = false;
        }
    }
}
Mari4og
UNец
 
Сообщения: 25
Зарегистрирован: 26 авг 2015, 09:20

Вернуться в Скрипты

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

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