我可以通过 public void 或其他方式更改场景(值?)吗?我不想每次都编写新代码并更改要加载的场景
Can i change the scene (value?) via public void or something? I do not want to make a new code everytime and change the scene that is going to load
这是我正在使用的代码。如果目标被带有正确标签的对象触及,它会切换到另一个场景。现在我想知道如何在不打开代码的情况下通过unity改变场景的数量。
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);
}
}
编辑:哦,我刚看到你只想在编辑器中更改它,只需创建一个 public 变量,然后可以在统一编辑器中更改该变量
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 你可以只使用 int 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
这是我正在使用的代码。如果目标被带有正确标签的对象触及,它会切换到另一个场景。现在我想知道如何在不打开代码的情况下通过unity改变场景的数量。
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);
}
}
编辑:哦,我刚看到你只想在编辑器中更改它,只需创建一个 public 变量,然后可以在统一编辑器中更改该变量
public int levelNumber = 1;
private void OnCollisionEnter(Collision collision)
{
if (collision.collider.tag == strTag)
SceneManager.LoadScene(levelNumber);
}
void Awake(){
DontDestroyOnLoad(this)
}
如果该对象有可能已经存在于另一个场景中,请确保事先检查该对象是否存在并销毁不需要的对象。
此外,更改您的 LoadScene 代码。目前你总是加载 1。如果你的场景从 1 到 x 你可以只使用 int 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