2017-08-28 56 views
0

在我们的应用程序中,当我们启动应用程序(或构建到Android设备)时显示splash screen,这是通过Unity的Edit -> Project Settings -> Player完成的,但我们现在有一个功能,有时在应用的中间还重新启动应用程序,所以我们想编写这种行为,这样我们就可以显示不同闪屏,如果应用程序重新启动中期使用手动编程启动画面以在任意时间出现

我们似乎无法弄清楚如何以编程方式执行此操作,或者完全在应用程序代码中执行此操作,因此我们将帮助您解决任何问题。

我们所知道的(并且已经实现)是通过:

PlayerPrefs.SetString("LastShownComponent", menuId); 
PlayerPrefs.Save(); 

,它可以记住,如果这是第一次应用开始(原开机画面)或用户是否是中期使用情况,但是当应用重新加载中期使用时,我们如何指定另一张要加载的图片为splash screen

编辑:更多详细信息...

以前,我们只用了下面的代码:

if (_callbackUri == null) 
{ 
    SceneManager.LoadScene("ReloadScene"); 
} 

现在,我们应用程序,重新启动中期使用(针对特定原因)由:

if (_callbackUri == null) 
{ 
    PlayerPrefs.SetInt("Restarting", 1); 
    PlayerPrefs.Save(); 
    #if UNITY_ANDROID && !UNITY_EDITOR 
    AndroidPlugin.Restart(); 
    #else 
    SceneManager.LoadScene("ReloadScene"); 
    #endif 
} 

然而,在重新启动时,显然重新加载相同的闪屏图像即在播放器的设置。

我们可能需要在AndroidPlugin.Restart();以下添加代码才能加载新的启动画面图像,但我们该怎么做?我们需要一个新的场景吗?

+2

是否有可能有一个空白的场景,基本上加载2个不同的启动画面,取决于在playerprefs中保存的内容?因此,例如,游戏启动时,您的初始场景是一个空白场景,其脚本根据是否设置了'PlayerPrefs.SetString(“GameReload”,reloadingValue)加载启动屏幕,然后每次您实际打开游戏时都会设置该值假? – Eddge

+0

@Eddge感谢您的回复,但我不确定我是否了解您。我将编辑我的帖子以添加详细信息,因此,如果您再次阅读并详细说明您的评论问题,那将会很棒。谢谢 – Joshua

+1

你是否在谈论统一闪屏本身?例如,您希望它播放Unity徽标的动画版本,第一次启动时,然后当您调用'AndroidPlugin.Restart()'时,您希望它播放静止标志?或者你在说自己的自定义启动画面?我不确定您是否可以改变Unity Splash屏幕的显示方式。这就是为什么我提到添加一个空白场景,将为您自己的自定义启动画面加载2个场景中的1个。 – Eddge

回答

1

每点评:测试此

最快的方法是创建一个空白的场景,一个游戏对象添加到场景名称它像SplashLoader并给它一个脚本。

您在脚本唯一需要的是启动方法,

void Start() 
{ 
    // Default to 0 incase this value isn't stored 
    int reloaded = PlayerPrefs.GetInt("Restarting", 0); 

    // Reset to 0 so if the game is closed without restarting it will display the correct scene 
    PlayerPrefs.SetInt("Restarting", 0); 

    PlayerPrefs.Save(); 
    if(reloaded == 1) 
    { 
     SceneManager.LoadScene("ReloadScene"); 
    } 
    else 
    { 
     SceneManager.LoadScene("SplashScene"); 
    } 
} 

在这里,您将创建两个场景,一个是你的正常SplashScene和1为您ReloadScene。在这些场景中,您可以创建一个画布对象并向其添加图像,然后根据它所在的场景更改图像。

另一种选择,如果你想使用一个场景,并保持相同的动画说你有您的徽标淡入的效果,你可以这样做:

为闪屏创建一个场景,让你的0索引场景,为其添加一个画布和一个图像,然后使用动画工具来获得启动画面效果。

将脚本添加到图像对象,根据首选项存储的内容更改图片,您可以使用与上面的开始方法几乎相同的代码,而不是调用SceneManager加载场景,您只需更新图片。

+0

非常感谢。我会尝试。 – Joshua

1

简答:你不行。

只能在编辑器内(通过Inspector或通过代码使用UnityEditor.PlayerSettings.SplashScreen类)更改/修改启动画面(以及与之相关的所有内容)。

在Android上你必须有一个闪屏:如果你尝试通过播放器设置禁用它,Android应用程序将无法工作。

因此,唯一的解决方案是使用空白的启动画面,然后是两个不同的起始场景(具有不同的背景),如果您正在启动或重新启动应用程序(通过使用字段在PlayerPrefs正如你所想的那样)。

编辑

事实上,你甚至不需要多个场景来完成你想做的事情。

只创建一个场景(我们称之为SplashScene),其中Main CameraCanvasImage。 安装这个脚本到Main Camera

using UnityEngine; 
using UnityEngine.UI; 
using System; 

public class NewBehaviourScript : MonoBehaviour { 

    [SerializeField] 
    Image backgroundImage; 
    [SerializeField] 
    Sprite launchBackground, restartBackground; 

    private void Awake() { 
     if (!PlayerPrefs.HasKey("Background Splash Screen")) 
      PlayerPrefs.SetInt("Background Splash Screen", 0); 
     int background = PlayerPrefs.GetInt("Background Splash Screen"); 
     switch (background) { 
      case 0: 
       backgroundImage.sprite = launchBackground; 
       break; 
      case 1: 
       backgroundImage.sprite = restartBackground; 
       break; 
      default: 
       throw new Exception("Invalid Background Splash Screen PlayerPref value!"); 
       break; 
     } 
    } 
} 

当然SplashScene应在独立场景列表索引0。

你需要做的唯一的另一件事是之前任何添加

PlayerPrefs.SetInt("Background Splash Screen", 0);

Application.Quit();方法,你在你的项目中调用和

PlayerPrefs.SetInt("Background Splash Screen", 1);

之前的任何AndroidPlugin.Restart();方法在你的代码。

不要忘记通过Inspector ofc(通过GetComponent获取它们,如果您愿意,也可以通过资产加载,由您决定),将脚本和图像引用分配给脚本变量。

就是这样。 :)

+0

非常感谢。我会尝试。干杯 – Joshua

+0

我创建了一个新场景,并将原始图像添加到其原始大小的画布图像。然后我将它添加到索引为4的构建场景中,并添加以下代码:'PlayerPrefs.SetInt(“Restarting”,1); PlayerPrefs.Save(); #if UNITY_ANDROID &&!UNITY_EDITOR SceneManager.LoadScene(4); AndroidPlugin.Restart(); #else SceneManager.LoadScene(“ReloadScene”); #endif'但是,它不起作用。我错过了什么? – Joshua

+1

我会编辑我的答案,告诉你如何去做你需要的。 – Galandil