我想在Unity中创建一个简单的移动应用,让用户选择一个相框,然后用它做一些事情。
因此,我在scene1中有一个预制件(图片框)的列表。此场景在app-start上显示给用户。

它在我的应用程序中的样例图片:

一旦用户接触到这些帧中的一个,他就会被引用到scene2。这是我的代码,用于确定哪些框架被触摸:FrameSelection.cs附加到FrameList gameObject。
void Update()
{
if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
{
Touch touch = Input.touches[0];
Ray ray = Camera.main.ScreenPointToRay(touch.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Debug.Log(hit.transform.name);
if (frameList.Contains(hit.transform.gameObject))
{
//Switch scene
}
}
}但是如何将选定的预制件从scene1传递到scene2?我希望预制只实例化在scene2取决于选定的预制在scene1。
在scene2中,我有一个当用户触摸屏幕时实例化对象的脚本:ObjectSpawner.cs
void Update()
{
if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
{
Touch touch = Input.touches[0];
Ray ray = Camera.main.ScreenPointToRay(touch.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
placedObject = Instantiate(objectToSpawn, hitObject.point,hitObject.transform.rotation);
...我试图通过在我的FrameSelection.cs脚本中使用DontDestroyOnLoad来避免在场景切换时被破坏,但是当加载scene2时,我仍然得到一个MissingReferenceException。
void Awake()
{
DontDestroyOnLoad(transform.gameObject);
}如果有任何帮助,我会很高兴的!
发布于 2020-06-17 04:26:41
另一种选择是使用可脚本化对象。它们是整洁的小数据容器,可以用来存储复杂的对象。此数据独立于场景和类而持久存在。它们不涉及很多额外的代码,也是Unity开发人员需要熟悉的东西,因为它们确实能让你走出一些糟糕的漏洞,当你试图为持久数据编码时,你可能会遇到这些漏洞。
发布于 2020-06-17 01:05:46
我想得太多了,我可以通过实现我附加到frameList上的单例模式来解决它。因此,选定的帧在场景切换过程中保持不变。还是要感谢@whathm
https://stackoverflow.com/questions/62410024
复制相似问题