//NGUI相关代码
public UIButton Btn1;
void Start()
{
UIEventListener.Get(Btn1.gameObject).onClick = OnBtn1Click;
}
private void OnBtn1Click(GameObject go)
{
Debug.Log("NGUI OnNGUIBtn1Click");
Screen.fullScreen = !Screen.fullScreen;
}
//UGUI相关代码
public Button Btn1;
void Start()
{
Btn1.onClick.AddListener(delegate
{
Debug.Log("UGUI OnFullScreen1 Click");
Screen.fullScreen = !Screen.fullScreen;
});
}
以上代码发布之后,点击Btn1按钮都有一个问题,从非全屏切换到全屏的情况下,点一下没有反应,再点击任何区域就会切换到全屏,从全屏切换到非全屏没有问题。
尝试使用UGUI的EventTrigger与NGUI的UIEventTrigger
//NGUI相关代码
public void OnUIEventTriggerClick()
{
Debug.Log("NGUI OnUIEventTriggerClick");
Screen.fullScreen = !Screen.fullScreen;
}
//UGUI相关代码
public void OnEventTriggerClick()
{
Debug.Log("UGUI OnEventTriggerClick");
Screen.fullScreen = !Screen.fullScreen;
}
以上是NGUI与UGUI相关代码跟组件,导出工程后发现UGUI的全屏/非全屏切换没有问题,但是NGU的非全屏切换到全屏还是有之前的问题。
因为项目使用的还是NGUI,所以还是得想办法解决,就调用JS那边的接口,最后NGUI与UGUI的全屏切换都没问题了,以下是相关代码。
创建Plugins文件夹,创建MyJS.jslib文件 编写相关代码
mergeInto(LibraryManager.library,
{
SetFullScreen: function (value)
{
console.log("SetFullScreen Click value = " +value);
gameInstance.SetFullscreen(value);
},
});
Unity工程里面创建UnityCallJS.cs脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
public class UnityCallJS
{
[DllImport("__Internal")]
public static extern void SetFullScreen(int num);
}
//NGUI相关代码
public UIButton UnityCallJSBtn;
void Start()
{
UIEventListener.Get(UnityCallJSBtn.gameObject).onClick = OnUnityCallJSBtnClick;
}
private void OnUnityCallJSBtnClick(GameObject go)
{
Debug.Log("NGUI OnUnityCallJSClick ");
UnityCallJS.SetFullScreen(Screen.fullScreen ? 0 : 1);
}
//UGUI相关代码
public Button UnityCallJSBtn;
void Start()
{
//Console.Instance.Show();
UnityCallJSBtn.onClick.AddListener(delegate
{
Debug.Log("UGUI OnUnityCallJSClick ");
UnityCallJS.SetFullScreen(Screen.fullScreen ? 0 : 1);
});
}
总结:如果是使用UGUI可以使用EventTrigger来实现全屏或者通过调用JS的接口,EventTrigger要好一点。NGUI暂时只想到通过调用JS接口实现,欢迎补充。
Demo地址:https://download.csdn.net/download/fan1044696905/12295198