最近公司有个项目需要使用Unity制作一个手机APP
但是大家都发现了使用Unity打包出来的Andorid项目大家都知道是默认全屏,这样的话导航栏和状态栏都将不显示。这样看起来怎么像是一个APP呢!
显示底部虚拟导航栏很简单(虽然我找了一天的百度 o(╥﹏╥)o)
Screen.fullScreen = false;
对没错就是这个,就是这么简单,我找了一天后来被一个人提醒了一下尝试了可以在华为畅享7上已经测试过没有问题!
显示顶部导航栏就有一些麻烦了。代码如下
/// <summary>
/// 隐藏上方状态栏
/// </summary>
public static void Hide()
{
#if !UNITY_EDITOR && UNITY_ANDROID
setStatusBarValue(1024); // WindowManager.LayoutParams.FLAG_FULLSCREEN; change this to 0 if unsatisfied
#endif
}
/// <summary>
/// 显示上方状态栏
/// </summary>
public static void Show()
{
#if !UNITY_EDITOR && UNITY_ANDROID
setStatusBarValue(2048); // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
#endif
}
private static void setStatusBarValue(int value)
{
newStatusBarValue = value;
using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
activity.Call("runOnUiThread", new AndroidJavaRunnable(setStatusBarValueInThread));
}
}
}
private static void setStatusBarValueInThread()
{
using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
using (var window = activity.Call<AndroidJavaObject>("getWindow"))
{
window.Call("setFlags", newStatusBarValue, newStatusBarValue);
}
}
}
}
在合适的位置调用show函数就可以了,效果图如下。
关于顶部状态栏可以参阅该文章: Unity3D调用Android功能与组件(九)—状态栏与通知栏
提醒一下大家,如果使用Unity做这个APP的话让美工提前将上方状态栏给预留出来否则的话显示上方状态栏的时候会遮挡掉你UI界面的某些功能。底部的导航栏没关系的。效果看起来是不会影响分辨率。