2017-08-28 58 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