Unity - 我如何从场景1中转移一个对象并在场景2中实例化它?

问题描述 投票:1回答:2

我想在Unity中创建一个简单的移动应用程序,让用户选择一个图片框架,然后做一些事情。

所以,我在场景1中有一个预制框架(Picture Frames)的列表。这个场景会在应用启动时显示给用户。

enter image description here

我的应用中的示例图片。enter image description here

一旦用户触摸到其中一个框架,他就会被转到场景2。这是我的代码,用于确定哪些帧被触碰。FrameSelection.cs 被附加到 FrameList gameObject。

void Update()
    {
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
            Touch touch = Input.touches[0];
            Ray ray = Camera.main.ScreenPointToRay(touch.position);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                Debug.Log(hit.transform.name);
                if (frameList.Contains(hit.transform.gameObject))
                {
                    //Switch scene
                }
            }
        }

但是,我怎样才能将选定的预制件从场景1传递到场景2呢?我想让预制件只在场景2中实例化,这取决于场景1中选择的预制件。

在场景2中,我有一个脚本,当用户触摸屏幕时实例化对象。ObjectSpawner.cs

    void Update()
    {
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
            Touch touch = Input.touches[0];
            Ray ray = Camera.main.ScreenPointToRay(touch.position);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                placedObject = Instantiate(objectToSpawn, hitObject.point,hitObject.transform.rotation);
...

我试图通过使用以下方法来避免在场景切换时 destroy DontDestroyOnLoad 在我 FrameSelection.cs 脚本,但我仍然得到一个 MissingReferenceException 当场景2被加载。

    void Awake() 
    {
        DontDestroyOnLoad(transform.gameObject);
    }

我将很高兴得到任何帮助

c# unity3d mobile
2个回答
1
投票

另一个选择是使用可脚本对象。它们是整洁的小数据容器,可以用来存储复杂的对象。这些数据是独立于场景和类而持久存在的。它们不涉及很多额外的代码,是Unity开发者需要熟悉的东西,因为当你试图为持久化数据编码时,它们确实能让你摆脱一些讨厌的漏洞。

使用可脚本对象来架构你的代码


0
投票

我想多了,我可以通过实现单人模式来解决这个问题,我把它附加到frameList上。所以被选中的帧会在场景切换中保持持久性。还是要感谢@whathm

© www.soinside.com 2019 - 2024. All rights reserved.