我正在编写一个Android应用程序,允许用户 DIY他们的手机套 ,然后将它们导出为.stl /其他3D打印格式。
我有几个场景(每个场景都有一个用于切换到下一个场景的按钮):
场景0(开始场景) :一个带有退出按钮和开始按钮的简单开始菜单(带有图像作为背景的画布)。
场景1(模型场景) :3个按钮(允许用户选择3种型号:iphone7,iphone6s,LGG6)。按下其中一个按钮后,相应的手机外壳将显示给用户。
场景2(彩色场景) :有多种颜色供用户选择。触摸颜色按钮后,手机外壳的材质将更改为相应的颜色。用户可以立即预览案例的样子。
场景3(模式场景) :有多种模式供用户选择。触摸图案按钮后,手机外壳的背面将更改为相应的图案。用户可以立即预览案例的样子。
......还会有更多场景为手机外壳添加更多功能/功能。
场景x(导出) :将手机外壳导出为3D打印格式。
我在编码时遇到了一些问题。
主要问题是我需要在所有场景中保留所选的手机外壳(3D对象)。详细地说,在用户在scene1中选择了想要的手机外壳(比方说LGG6)之后,需要保留外壳并将其传递到下一个场景(场景2:彩色场景)以进行进一步编辑。在场景2中对案例着色后,彩色手机外壳将被传递到下一个场景(图案场景)以编辑图案等等。
这些天我一直在网上冲浪,我找到了几种可以实现这一目标的方法。我决定使用 " DontDestroyOnLoad" 。但是,有些事情我不明白:
我创建了一个名为&#34; AppManager&#34;的游戏对象。在场景0中。有一个C#脚本(也称为&#34; AppManager&#34;附加到它。在其中,我创建了许多变量来存储所有场景中所需的所有元素 < / em> ,包括Canvas&amp; UI元素,3D对象(3种手机外壳,我将它们存储在渲染类型中),相机,定向光以及我需要的功能。
然后,我实施了一个&#34; DontDestroyOnLoad&#34;脚本内的函数。 enter image description here
此外,我将所有UI元素,3D对象,相机作为 的孩子们做了#34; AppManager&#34; enter image description here
我想问一下:
答案 0 :(得分:1)
我正确使用“DontDestroyOnLoad”吗?我仍然不明白如何从其他场景中访问存储在“AppManager”(场景o)中的变量和函数。
是的,你是。您可以通过以某种方式通过脚本访问它来访问下一个场景中的变量,例如,可以将其存储在静态变量中,或者具有可以获取的管理器类,并通过管理器类获取不是的对象破坏。
由于我有几个场景有一些其他场景不需要的独特按钮,我希望我可以激活每个场景中特定UI元素的功能(.gameObject.SetActive(true / false))并禁用我不需要的那些。我想知道我是否可以在“AppManager”中实现此功能?或者在每个场景中,我需要创建一个独特的脚本来启用/禁用这些UI元素?
您可以在管理按钮的每个场景中创建一个脚本,然后在脚本的“OnEnable()”方法中将脚本本身存储在一个静态变量中。
public class ExampleScript : MonoBehaviour
{
/// <summary>
/// Store the ExampleScript in a static variable, then have the variable set when the scene is loaded, for example through OnEnable() or possibly Awake().
/// ExampleScript should act as a manager script and hold the references to the buttons in each scene.
/// </summary>
public static ExampleScript _Instance;
private void OnEnable()
{
_Instance = this;
}
}
public class UsingExampleScript : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown("i"))
{
if (ExampleScript._Instance != null)
{
//Use variables from example script, for example the buttons.
}
}
}
}
我想在场景2,3,4中实现“后退”按钮......这是什么意思?让我们说用户现在在场景3(模式场景)。他选择了LGG6表壳和红色(材质)。但他想修改颜色,从红色变为黑色。然后,在场景3中有一个后退按钮,让他回到场景2以选择颜色。这意味着我的应用需要撤消颜色变化。我想询问是否有一个统一的函数可以保存当前场景中的所有信息,以后可以重新加载?
你可以有一个带有静态变量的脚本,然后它们应该保存在场景变化之间,然后在每个场景的开头加载它们。