问题描述
我正在通过脚本动态生成下拉列表选项,并基于选项值和其他场景应加载的某些条件。 (通过单击应加载新场景的下拉值)。我已将所有必需的脚本附加到所有场景中的下拉游戏对象,并且动态下拉选项适用于开始场景,但是当加载新场景时,new 的下拉列表为空,之前的感知下拉列表的值未加载.下面是脚本。任何人都可以给我一个提示或示例脚本来将下拉值从一个场景转移到另一个场景。谢谢
''''
公共类 SceneLoad : MonoBehavIoUr {
Dropdown m_Dropdown;
private ParseHandler parsehand;
int Scene_num;
public void AddDropdown()
{
m_Dropdown = GetComponent<Dropdown>();
m_Dropdown.ClearOptions();
m_Dropdown.options.Add(new Dropdown.OptionData("--Starting Page--"));
parsehand = GameObject.FindobjectOfType(typeof(ParseHandler)) as ParseHandler;
foreach (string threat in parsehand.GetList())
{
if (threat == "TMP")
{
m_Dropdown.options.Add(new Dropdown.OptionData("Vehicle on highway changing the lane"));
}
if (threat == "DOS")
{
m_Dropdown.options.Add(new Dropdown.OptionData("Vehicle on highway met with an accident"));
}
if (threat == "HJK")
{
m_Dropdown.options.Add(new Dropdown.OptionData("Pedestrians behind the vehicle While unparking"));
}
}
m_Dropdown.onValueChanged.AddListener(delegate { callingthescenes(m_Dropdown); });
}
private void callingthescenes(Dropdown mydropdown)
{
select_scene(mydropdown.options[mydropdown.value].text);
}
public void select_scene(string scenetext)
{
if (scenetext == "Pedestrians behind the vehicle While unparking")
{
SceneManager.LoadScene(1);
Scene_num = 1;
}
if (scenetext == "Vehicle on highway changing the lane")
{
SceneManager.LoadScene(2);
Scene_num = 2;
}
}
}
解决方法
您可以使用 DontDestroyOnLoad。 DontDestoryOnLoad 方法是一种单一行为方法,可确保在切换场景时,对象保存所有引用(如果存在于新场景中)和值。
加载新场景会破坏所有当前场景对象。称呼 Object.DontDestroyOnLoad 在关卡加载期间保留对象。 如果目标对象是组件或游戏对象,Unity 也 保留所有 Transform 的孩子。 Object.DontDestroyOnLoad 不返回值。
用法,将其添加到您的单一行为脚本中,在类中。
DontDestroyOnLoad(this.gameObject);