Unity3d 统一:如何切换场景,当返回到原始场景时,将玩家返回到他们切换场景的位置

Unity3d 统一:如何切换场景,当返回到原始场景时,将玩家返回到他们切换场景的位置,unity3d,Unity3d,我有两个场景:大街和建筑场景 当玩家在Main Street时,如果玩家的触发框接触到建筑并按下q,场景将切换到建筑场景。 我希望这样,当玩家退出建筑场景并返回主街场景时,玩家回到他们进入建筑场景的位置。如果这不合理,请提前道歉 场景切换脚本: public int buildingToLoad; public Text InputText; public movement player; public Vector3 playerPrevPos; vo

我有两个场景:大街和建筑场景 当玩家在Main Street时,如果玩家的触发框接触到建筑并按下q,场景将切换到建筑场景。 我希望这样,当玩家退出建筑场景并返回主街场景时,玩家回到他们进入建筑场景的位置。如果这不合理,请提前道歉

场景切换脚本:

    public int buildingToLoad;
    public Text InputText;
    public movement player;
    public Vector3 playerPrevPos;

    void OnTriggerEnter2D(Collider2D col){
        if(col.CompareTag("Player")){
            InputText.text = ("[Q] to enter");
            if(Input.GetKeyDown("q")){
                if (gameObject.tag == "EntryPoint"){
                    playerPrevPos = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z);
                }
                //Debug.Log(gameObject.tag);
                Application.LoadLevel(buildingToLoad);  
            }
            
        }
    }

    void OnTriggerStay2D(Collider2D col){
        if(col.CompareTag("Player")){
            if(Input.GetKeyDown("q")){
                //spawn = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z)
                Application.LoadLevel(buildingToLoad);
                if (gameObject.tag == "EntryPoint"){
                    playerPrevPos = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z);
                }
            }
        }
    }

    void OnTriggerExit2D(Collider2D col){
        if(col.CompareTag("Player")){
            InputText.text = ("");
        }
    }
设置玩家离开建筑时的位置

public switchScene ss;
void OnTriggerStay2D(Collider2D col){
        if(Input.GetKeyDown("q")){
            if(col.gameObject.CompareTag("ExitPoint")){
                transform.position = ss.playerPrevPos;
            }       
        }
    }
但是,这两张纸条不起作用,我不确定这是否相关,但当我让玩家在游戏中切换场景时,会弹出以下错误:

NullReferenceException:对象引用未设置为对象的实例 movement.OnTriggerStay2D UnityEngine.col

此错误消息提及此行的错误:

transform.position = ss.playerPrevPos;

在Unity中,传统的场景加载具有相当大的破坏性。有一个概念是通过将游戏对象设置为DontDestroyOnLoad来将其设置为安全的,在某种程度上,它将对象从场景中完全移除,从而保护它不受场景加载的影响

Unity最终正确地实现了多场景编辑和加载。它本质上是DDOL,但做得很好

现在可以同时加载多个场景。现在,您可以使用一个管理器场景来处理场景之间常见的所有对象,并且只加载和卸载该场景所需的特定对象

您可以这样使用它:

SceneManager.LoadScene("YourScene", LoadSceneMode.Additive);
这将在当前加载的场景之外加载场景。同样,删除场景也是:

SceneManager.UnloadScene("YourScene");
现在,如果您有一个管理器场景,则可以在管理器场景中包含一个脚本,该脚本保存每个场景的数据。例如,您可能有:

public Vector3 InsideSceneLastPosition { get; set; }
然后在加载外部场景之前将其指定给。再次加载内部场景时,可以再次读取InsideSceneLastPosition以重新定位角色

Unity上LoadSceneAsync页面的链接

还有更多的内容,例如,你必须监听SceneManager.sceneLoaded事件才能知道你何时实际加载了下一个场景,这样你才能重新定位你的游戏对象。你可以找到这方面的信息

只需将多个场景从“项目”窗口拖动到“层次”窗口中,即可看到多场景编辑。列出的所有场景将一起工作。但是你必须小心,因为还有另一个问题,你不能将对象从一个场景引用到另一个场景。您可以跨场景调用脚本,但无法将游戏对象从一个场景拖动到另一个场景中组件的对象字段中。别担心,你会抓住的=