保存自定义Global数据
每当AdventureCreator保存和加载游戏时,它都会检查是否存在某些“脚本挂钩”,如果存在则调用它们。这些钩子可以用来保存和加载游戏可能需要的自定义数据。请注意,这是一个高级主题,因此需要了解脚本接口!
虽然保存场景数据是一个单独的过程,但这些挂钩用于全局数据,这些数据存在于场景之外,例如资产文件中。在本教程中,我们将创建一个简单的示例,其中包含保存人名。
在我们的保存游戏文件中,这个名称将临时存储为一个全局变量,所以第一步是创建一个可以被我们的钩子使用的变量。由于名称是字符串,我们将创建字符串Variable。转到Variables Manager,然后单击创建新的Global variable。
将这个新变量的Label设置为SaveText,将Type设置为String。它的初始值与此无关,但请记下它的ID号。在本例中,它是3:
现在,让我们创建脚本挂钩。创建一个名为MyName
的新C#脚本文件,并让它导入AC命名空间:
1 | using UnityEngine; |
声明名为myOwnName
的公共字符串。实际上,这里可能会引用自定义资产而不是字符串,但此示例将允许我们在Inspector中轻松查看和编辑。我们还需要一个整数varID来存储上述全局变量的ID号。
1 | using UnityEngine; |
我们将在保存时将此脚本变量的值写入全局变量,并在加载时从全局变量中检索。为此,我们将使用OnBeforeSaving
和OnAfterLoading
自定义事件。
1 | using UnityEngine; |
(注意:BeforeSave
中的“saveID
”整数参数是在AC v1.66.4中引入的。如果您使用的是早期版本,只需将BeforeSave
函数参数保留为无。)
在BeforeSave
中,我们将myOwnName
的值写入AC全局变量:
1 | GlobalVariables.SetStringValue (varID, myOwnName); |
在AfterLoad
中,我们将从AC全局变量更新myOwnName
的值:
1 | myOwnName = GlobalVariables.GetStringValue (varID); |
从这里GlobalVariables查看AC的GlobalVariable提供的方法
1 | using UnityEngine; |
我们现在只需要确保这个脚本出现在我们的所有场景中。有几种方法可以做到这一点:
- 将其设置为prefab,并在每个场景中放置prefab的实例
- 更新脚本以标记为
DontDestroyOnLoad
- 将其附加到AC的
PersistentEngine
,它可以自动在场景更改后幸存下来
要执行后者,请在Assets/AdventureCreator/Resources中找到PersistentEngine的prefab。将MyName组件添加到其组件堆栈的底部:
我们的myOwnName字符串现在将在保存游戏中存储和检索。您可以通过在Inspector的myName字段中输入名称、保存、更改名称并重新加载来测试这一点。