统一全屏的问题

Issues with fullscreen in unity

我正在 Unity 2D 中制作一个简单的菜单。我创建了一个激活全屏选项的开关。至此,一切正常。 然后,我想做同样的事情,但按下 F11 键。问题从这里开始。当我按 F11 时,屏幕变为全尺寸,但切换不激活,反之亦然。 所以,我想创建一个 C# 脚本来检查 Screen.fullscreen 是否为真,它会激活切换,如果它是假的,它会停用它。 我认为这将解决问题,但没有。当我尝试按 F11 或单击切换按钮时,整个 window 变得疯狂。我不知道如何解释,但 window 会自己开始摇晃。 如果有人帮助我,我将不胜感激,谢谢!

切换的代码是这样的:

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;
        }
    }
}
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

    }

}

}

您在 ToggleScreen 脚本和 FullScreenMode 脚本中重复了 fullScreen 逻辑。我会将这些(并简化它们)组合成 ScreenManager class:

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); 
    }
}

然后,只需在 FullScreenMode 脚本的 Update() 方法中调用 ScreenManager.ToggleFullScreen()

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);
        }
    }
}