Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何保存/加载沙盒游戏中每个游戏对象的状态?_Unity3d_Serialization_Unity5 - Fatal编程技术网

Unity3d 如何保存/加载沙盒游戏中每个游戏对象的状态?

Unity3d 如何保存/加载沙盒游戏中每个游戏对象的状态?,unity3d,serialization,unity5,Unity3d,Serialization,Unity5,我正在努力掌握如何处理场景中每个游戏对象的保存/加载。我目前将数据保存在Json中,效果很好,我正在努力解决的部分是保存整个游戏状态的逻辑 例如,我正在制作一个沙盒游戏,你可以在其中购买树木、锄地、种植作物、采摘药草等。所有这些可交互的游戏对象都是从预制件创建的,效果很好。但我需要以某种方式将每个游戏对象及其状态(即作物是否完全生长等)保存到一个文件中,以便在每次退出/进入场景(或游戏)时保存/加载 以我在下面创建的这个场景为例,所有的瓷砖(除了高高的草)都是可交互的,也就是说,我可以砍倒那些树

我正在努力掌握如何处理场景中每个
游戏对象的保存/加载。我目前将数据保存在Json中,效果很好,我正在努力解决的部分是保存整个游戏状态的逻辑

例如,我正在制作一个沙盒游戏,你可以在其中购买树木、锄地、种植作物、采摘药草等。所有这些可交互的
游戏对象都是从预制件创建的,效果很好。但我需要以某种方式将每个
游戏对象及其状态(即作物是否完全生长等)保存到一个文件中,以便在每次退出/进入场景(或游戏)时保存/加载

以我在下面创建的这个场景为例,所有的瓷砖(除了高高的草)都是可交互的,也就是说,我可以砍倒那些树,采摘花朵,种植一些已经生长的作物:

我不知道如何最好地保存/加载所有这些信息。假设我将每个
GameObject
保存在一个文件中,那么我会在每次进入场景时读取该文件并在运行时实例化每个对象吗?甚至可以保存整个
游戏对象
并从文件中实例化它吗?我最好怎么做呢?这也意味着场景的加载方式会有所不同,这取决于我是不是第一次进入场景(一切都处于原始状态),以及之后的任何时间它都会从文件中加载(而不会创建一堆副本)


我使用程序员的方法来保存/加载数据。

保存场景中的所有对象不是一件容易的事情。如果你做不到这一点,资产插件上有一些插件可以帮助你。我在pas中做过,这很复杂,但代码无法共享,因为它是为另一个人做的。我会给你一个想法,可能会让你开始。1.无法保存游戏对象。你也不必。只需获取Gameobjet名称,然后获取附加到它的所有脚本的名称。还要获取脚本名称空间的名称。这需要你用递归循环它们,并将这些信息作为一个类中的字符串。我曾经为此向人们推荐过一个插件,但我忘记了它的名字。当我找到它时,我会告诉你的。想知道如何从一个对象中获取所有组件?在循环中使用
GameObject.GetComponents(typeof(Component)
…查找子游戏对象?
Transform.GetChild(i)
。查找场景中的所有对象?使用
Resources.FindObjectsOfTypeAll()
。这应该可以让你开始了。很好,记住不要保存纹理2D。实现一种保存路径的方法,否则你的保存文件会很大。保存场景中的所有对象不是一件容易的事情。如果你做不到这一点,资产插件上的插件将帮助你。我在pas中做过这件事,它很复杂,但代码无法共享,因为它是为另一个人完成的。我会给你一个想法,让你开始。1.你不能保存游戏对象。你也不必保存。只需获取Gameobjet名称,然后获取附加到它的所有脚本的名称。还要获取脚本命名空间的名称。这要求你使用递归循环它们在一个类中以字符串的形式显示这些信息。我曾经为此向人们推荐过一个插件,但我忘记了它的名称。找到它后我会告诉你。想知道如何从一个对象中获取所有组件?使用
GameObject.GetComponents(typeof(Component)
…查找子游戏对象?
Transform.GetChild(I)
在循环中。找到场景中的所有对象?使用
资源。FindObjectsOfTypeAll()
。这应该可以让您开始。很好,记住不要保存纹理2D。实现一种保存路径的方法,否则保存的文件将非常大。