Unity:基于场景之间的对象单击更改相机位置

时间:2018-07-02 18:52:11

标签: c# unity3d scene

我正在创建一个游戏,该游戏将玩家从地图的等轴测俯视图转换为透视图。玩家首先要看地图,

Isometric view of map | Scene A

单击任一浮动的红色球体后,玩家将在球体位置的透视图中转移到单独的场景中。此处显示,

Perspective 1 | Scene B


Perspective 2 | Scene B

等轴测图和透视图是不同的场景,因此必须保持原样。播放器需要能够在场景A中单击一个球体,然后使摄像机移动到场景B中该球体的设置位置。

我目前的想法是,每个球体都可以有一个标签(1,2,...),一旦单击,便会使用if语句引用该标签,以将相机放置在另一个场景中。我的问题是,一旦进入下一个场景,我将不知道如何引用被单击的球体的标签。或者,如果返回场景A,如何将其重置为正常状态。

这是我已经开始的一些代码,但是我不确定我走的路是否正确。

using UnityEngine;
using UnityEngine.SceneManagement;

public class TagCheck : MonoBehaviour
{
    Camera m_MainCamera;

    public string sceneName;

    int count;

    private void Start()
    {
        m_MainCamera = Camera.main;
    }


    void LoadScene()
    {
        SceneManager.LoadScene(sceneName);
        DontDestroyOnLoad(gameObject);
    }

    void OnMouseDown()
    {
        LoadScene();
        Debug.Log(count);
    }

    void OnEnable()
    {
        SceneManager.sceneLoaded += OnLevelFinishedLoading;
    }

    void OnDisable()
    {
        SceneManager.sceneLoaded -= OnLevelFinishedLoading;
    }

    void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
    {

        if (count == 1)
        {
            if (GameObject.FindWithTag("1"))
            {
                m_MainCamera.transform.position = new Vector3(5f, 1.5f, 5f);
            }

            else if (GameObject.FindWithTag("2"))
            {
                m_MainCamera.transform.position = new Vector3(-5f, 1.5f, -5f);
            }
        }

        else
        {
            Destroy(gameObject);
        }


    }

谢谢大家的帮助!让我知道是否需要澄清任何事情。

2 个答案:

答案 0 :(得分:0)

我能够提出解决此问题的方法。通过将DontDestroyOnLoad脚本附加到它们,我可以将场景更改球跟随我进入下一个场景。在下一个场景中,有一个空的游戏对象,该对象连续检查具有特定标签的对象。找到后,该对象告诉检查者将相机移到我想要的空父母那里,然后将坐标重置为0。这是检查者脚本,

<link rel="manifest" href="/manifest.json">

谢谢

答案 1 :(得分:0)

我会将您的关卡数据信息抽象到JSON数据文件或ScriptableObject中,而不是将其直接放入代码中。

您的orb对象上还可以有一个“ TeleportTo” Vector3字段和“ SceneTo”“场景”字段,代码可以引用。