【发布时间】:2020-06-16 13:45:56
【问题描述】:
我想在 Unity 中创建一个简单的移动应用程序,让用户选择一个相框,然后用它做一些事情。
所以,我在场景 1 中有一个预制件(相框)列表。此场景在应用启动时显示给用户。
一旦用户触摸其中一个帧,他就会被引用到场景 2。这是我的代码,用于确定触摸了哪些帧:FrameSelection.cs 附加到 FrameList 游戏对象。
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
}
}
}
但是如何将选定的预制件从场景 1 传递到场景 2?我希望预制件仅在场景2中实例化,具体取决于场景1中选择的预制件。
在场景 2 中,我有一个脚本,当用户触摸屏幕时实例化对象: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);
}
我很乐意为您提供任何帮助!
【问题讨论】:
-
非常详细的问题,有很多很好的信息!干得好。当你到达scene2,检查FrameList,Frame1 还是它的子节点吗?当你将 Frame1 存储在 FrameList 中时,你将它存储在什么 var 中?换句话说,objectToInstantiate 何时填充?
-
@whathm 谢谢!我想多了,我可以通过实现我附加到 frameList 的单例模式来解决它。所以选定的帧通过场景切换保持不变。
-
将此作为问题的答案发布。 @whathm 得到了信任,我不必来看它 :)