首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一:如何切换场景,当返回原场景时,玩家返回他们的场景切换的地方。

统一:如何切换场景,当返回原场景时,玩家返回他们的场景切换的地方。
EN

Stack Overflow用户
提问于 2020-10-07 05:19:03
回答 1查看 1.8K关注 0票数 0

我有两个场景:主街和建筑场景,当玩家是主街时,如果玩家的触发盒触摸到大楼,玩家按下"q“键,场景就会切换到建筑场景。我想这样,当玩家离开建筑场景并返回到主街场景时,玩家回到了他们进入建筑场景的位置。如果这没有意义的话,请提前道歉。

sceneSwitchingScript:

代码语言:javascript
复制
    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 = ("");
        }
    }

当玩家离开大楼时,设置玩家的位置

代码语言:javascript
复制
public switchScene ss;
void OnTriggerStay2D(Collider2D col){
        if(Input.GetKeyDown("q")){
            if(col.gameObject.CompareTag("ExitPoint")){
                transform.position = ss.playerPrevPos;
            }       
        }
    }

然而,这两张纸片不起作用,我不确定这是否相关,但是当我让玩家在游戏中切换场景时,会弹出这个错误:

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

此错误消息提到了该行上的错误:

代码语言:javascript
复制
transform.position = ss.playerPrevPos;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 05:35:17

有了统一,传统的场景加载是相当破坏性的。通过将GameObject设置为DontDestroyOnLoad,可以将其设置为安全,这在某种程度上将对象从场景中移除,从而使其免受场景负载的影响。

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

现在,您实际上可以同时加载多个场景。现在,允许您做的是拥有一个"Manager“场景,它处理场景之间常见的所有对象,并且只加载(和卸载)该单独场景所需的特定对象。

你会像这样使用它:

代码语言:javascript
复制
SceneManager.LoadScene("YourScene", LoadSceneMode.Additive);

除了当前加载的场景之外,它还将加载"YourScene“。同样,移除场景是:

代码语言:javascript
复制
SceneManager.UnloadScene("YourScene");

现在,如果您有一个Manager场景,您可以在您的经理场景中包含一个脚本,该脚本保存每个单独场景的数据。作为一个讨厌的例子,您可能有:

代码语言:javascript
复制
public Vector3 InsideSceneLastPosition { get; set; }

然后在加载外部场景之前将其分配给它。当您再次加载您的内部场景时,您可以再次读取InsideSceneLastPosition来重新定位您的角色。

下面是链接到统一处的LoadSceneAsync页面。

不仅如此,您还必须侦听SceneManager.sceneLoaded事件,以了解何时实际加载了下一个场景,以便重新定位GameObejcts。您可以找到有关该这里的信息。

您可以看到多场景编辑我的简单拖动多个场景从项目窗口到您的层次结构窗口。列出的所有场景都将加在一起。但是你必须小心,因为有另一个“抓到”,因为你不能引用对象从一个场景到另一个场景。您可以调用脚本跨场景,但您将无法将游戏对象从一个场景中拖到另一个场景中组件的对象字段中。别担心,你会明白的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64237669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档