Проблемы с полноэкранным режимом в единстве - PullRequest
0 голосов
/ 05 марта 2019

Я делаю простое меню в Unity 2D.Я создал переключатель, который активирует полноэкранный режим.На данный момент все в порядке.Затем я хотел сделать то же самое, но нажав клавишу F11.Здесь начинается проблема.Когда я нажимаю F11, экран становится полноразмерным, но переключатель не активируется, и наоборот.Итак, я хотел создать скрипт C #, который проверяет, является ли Screen.fullscreen истинным, он активирует переключатель и, если он ложный, деактивирует его.Я думаю, что это решит проблему, но нет.Когда я пытаюсь нажать F11 или нажать на переключатель, все окно сходит с ума.Я не знаю, как это объяснить, но само окно начнет дрожать.Я был бы признателен, если бы кто-нибудь помог мне, спасибо!

Код переключателя таков:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ToggleScreen : MonoBehaviour
{
    public void togglescreen()
    {
        if(Screen.fullScreen == true)
        {
            Screen.fullScreen = false;
        }

        else
        {
            Screen.fullScreen = true;
        }
    }
}

Код клавиши F11 такой:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FullScreenMode : MonoBehaviour
{
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.F11))
        {
            if (Screen.fullScreen == true)
            {
                Screen.fullScreen = false;
            }
            else
            {
                Screen.fullScreen = true;
            }
        }


    }
}

И код активации и деактивации таков:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeValue : MonoBehaviour
{
    private Toggle onOffSwitch;

    private void Awake()
    {
        onOffSwitch = GetComponent<Toggle>();
    }

    private void Update()
    {
        //onOffSwitch.isOn = Screen.fullScreen;
        if(Screen.fullScreen == true)
        {
            onOffSwitch.isOn = true;
        }
        else
        {
            onOffSwitch.isOn = false;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Вы повторяете логику fullScreen в сценарии ToggleScreen и сценарии FullScreenMode. Я бы объединил их (и упростил) в класс ScreenManager:

using UnityEngine;

public class ScreenManager : MonoBehaviour
{
    Toggle onOffSwitch;

    void Start()
    {
        // Don't forget to attach the Toggle component to this game object
        onOffSwitch = GetComponent<Toggle>(); 

        // Subscribe to onOffSwitch's onValueChanged event handler
        onOffSwitch.onValueChanged.AddListener(delegate 
        {
            // delegate method to call when onOffSwitch.onValueChanged is raised.
            ToggleValueChanged(onOffSwitch); 
        });
    }

    public static void ToggleFullScreen(bool updateToggleUI)
    { 
        var toggledValue = !Screen.fullScreen;
        Screen.fullScreen = toggledValue;
        onOffSwitch.isOn = updateToggleUI ? toggledValue : onOffSwitch.isOn;
    }

    void ToggleValueChanged(Toggle change)
    {
        // The toggle was already changed via the UI, don't flip it back
        ToggleFullScreen(false); 
    }
}

Затем просто вызовите ScreenManager.ToggleFullScreen() в методе Update() сценария FullScreenMode:

using UnityEngine;

public class FullScreenMode : MonoBehaviour
{
    // Don't forget to drag the ScreenManager instance to this reference in the inspector
    [Serializable]
    ScreenManager _screenManager;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F11))
        {
            // Change the Toggle UI since this was triggered with F11
            _screenManager.ToggleFullScreen(true);
        }
    }
}
0 голосов
/ 05 марта 2019
public class Toggler
{

bool state = false;

public void ToggleState()
{

    state = !state; // This sets a Boolean value to the opposite of itself

    if (state)
    {

        // State was just toggled on

    }else{

        // State was just toggled off

    }

}

}
...