2015-11-09 72 views
1

我在Unity3D中用C#爲移動設備製作遊戲,但無法弄清楚如何檢查當前場景之前加載的場景。我需要檢查這個來改變玩家gameobject的重生點。首先,我添加了一個簡單的腳本來我的按鈕(loadnextscene和loadprevscene)檢查之前加載的場景

public class SwitchScene : MonoBehaviour { 
    public int sceneNumber; 

    public void LoadScene(int sceneNumber) { 
     Application.LoadLevel(sceneNumber); 
    } 
} 

第二個腳本從用戶處理觸摸輸入和改變玩家物體的移動。例如:如果玩家點擊第二關卡中的「加載上一個場景」按鈕以再次切換到第一關卡,我想將玩家對象的重生點設置在第二關卡上的右半部分上屏幕,而不是像第一次開始遊戲時那樣在左側。

我試過用Singleton和PlayerPrefs,但沒有成功。

+0

您之前的嘗試出了什麼問題?如果您與我們分享,我們可能會發現錯誤並幫助您解決問題。 – Serlite

回答

2

您需要將場景編號保存到LoadScene之前的某個變量,然後在加載場景後檢查它。 唯一的問題是這個變量在新場景加載後會被銷燬。所以,爲了防止它,你可以使用DontDestroyOnLoad。這裏是你怎麼做:

首先,創建一個新的空遊戲對象,並附加以下腳本它:

using UnityEngine; 
using System.Collections; 

public class Indestructable : MonoBehaviour { 

    public static Indestructable instance = null; 

    // For sake of example, assume -1 indicates first scene 
    public int prevScene = -1; 

    void Awake() { 
     // If we don't have an instance set - set it now 
     if(!instance) 
      instance = this; 
     // Otherwise, its a double, we dont need it - destroy 
     else { 
      Destroy(this.gameObject) ; 
      return; 
     } 

     DontDestroyOnLoad(this.gameObject) ; 
    } 
} 

而現在,您加載之前,保存在Indestructable對象的場景編號:

public class SwitchScene : MonoBehaviour { 
    public int sceneNumber; 
    public void LoadScene(int sceneNumber) { 
     Indestructable.instance.prevScene = Application.loadedLevel; 

     Application.LoadLevel(sceneNumber); 
    } 
} 

最後,在你的場景開始()檢查Indestructable.instance.prevScene並相應地做你的魔法。

此處瞭解詳情: http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

*我沒編譯代碼,所以可能會有一些錯誤,但這是一般的想法。

+1

這似乎是最可行的答案。我會建議一個靜態的int變量或字符串在一個Singleton類中保持這個並永不銷燬。這是類似的:) – ApolloSoftware

+0

我不明白currentScene變量應該有哪些值以及在哪裏使用它。當我在加載下一個場景之前將sceneNumber存儲在prevScene中時,它僅將當前場景索引作爲prevScene的值返回給我。 –

+0

對不起,我沒有說清楚:要知道你當前的場景是什麼,你可以使用'Application.loadedLevel'。所以這是當前場景,您只需在加載之前將該值分配給prevScene。我更新了這個例子。 –