0

这是我正在使用的代码。如果目标被带有正确标签的对象触及,它会切换到另一个场景。现在我想知道如何在不打开代码的情况下通过统一更改场景的数量。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class levelend: MonoBehaviour
{
    [SerializeField]
    string strTag;

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == strTag)
            SceneManager.LoadScene(1);
    }
}
4

1 回答 1

1

编辑:哦我刚刚看到你只想在编辑器中更改它,只需创建一个公共变量,然后可以在统一编辑器中更改该变量

public int levelNumber = 1;

private void OnCollisionEnter(Collision collision)
{
    if (collision.collider.tag == strTag)
           SceneManager.LoadScene(levelNumber);
    }
如果你想要一个持久的对象,你可以使用`DontDestroyOnLoad(GameObject)`[1] 对象方法。例如:
void Awake(){
     DontDestroyOnLoad(this)
}

如果该对象有可能已经存在于另一个场景中,请确保事先检查对象是否存在并销毁不需要的对象。此外,更改您的 LoadScene 代码。目前,您始终加载 1。如果您的场景从 1 到 x 编号,您可以使用 anint x = 1; 并添加x++;到 is。例如:

private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == strTag)
            x++;
            SceneManager.LoadScene(x);
    }

如果您的场景没有被计算,您可以例如使用字符串数组或其他东西并对其进行迭代。

[1] https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

于 2021-04-18T12:49:15.673 回答