我想在Unity中创建一个简单的移动应用程序,让用户选择一个图片框架,然后做一些事情。
所以,我在场景1中有一个预制框架(Picture Frames)的列表。这个场景会在应用启动时显示给用户。
一旦用户触摸到其中一个框架,他就会被转到场景2。这是我的代码,用于确定哪些帧被触碰。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
}
}
}
但是,我怎样才能将选定的预制件从场景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);
...
我试图通过使用以下方法来避免在场景切换时 destroy DontDestroyOnLoad
在我 FrameSelection.cs
脚本,但我仍然得到一个 MissingReferenceException
当场景2被加载。
void Awake()
{
DontDestroyOnLoad(transform.gameObject);
}
我将很高兴得到任何帮助
另一个选择是使用可脚本对象。它们是整洁的小数据容器,可以用来存储复杂的对象。这些数据是独立于场景和类而持久存在的。它们不涉及很多额外的代码,是Unity开发者需要熟悉的东西,因为当你试图为持久化数据编码时,它们确实能让你摆脱一些讨厌的漏洞。
我想多了,我可以通过实现单人模式来解决这个问题,我把它附加到frameList上。所以被选中的帧会在场景切换中保持持久性。还是要感谢@whathm