统一全屏的问题
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);
}
}
}
我正在 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);
}
}
}