什么是序列化

在 Unity 中,序列化是指将对象转换为一种可存储或传输的格式的过程,以便将对象保存到硬盘或从网络传输对象。在 Unity 中,我们可以通过将脚本附加到游戏对象上,并为脚本中的字段添加[SerializeField]属性,将字段序列化到 Inspector 视图中,使得我们可以在 Inspector 视图中编辑这些字段的值。

序列化是 Unity 的一个重要概念,因为它使得我们可以轻松地创建、修改和保存游戏对象和场景。使用序列化,我们可以将场景中的所有对象和组件以及它们的属性保存为二进制数据,以便在下次打开项目时可以重新加载并还原场景。这样可以减少手动创建和配置游戏对象的工作量,并且可以使游戏对象的修改变得更加容易。

以下是一个示例,演示如何在 Unity 中序列化一个类:
(此处使用的JsonUtility.ToJson 保存数据为Json文件。JJson是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成)

###点击查看代码

using UnityEngine;

[System.Serializable] // 必须添加 Serializable 属性
public class PlayerData
{
    public int health;
    public int score;
}

public class Player : MonoBehaviour
{
    public PlayerData playerData;

    void Start()
    {
        // 初始化数据
        playerData = new PlayerData();
        playerData.health = 100;
        playerData.score = 0;

        // 序列化数据
        string data = JsonUtility.ToJson(playerData);
        PlayerPrefs.SetString("PlayerData", data);
    }

    void Update()
    {
        // 修改数据
        playerData.health -= 1;
        playerData.score += 10;

        // 序列化数据
        string data = JsonUtility.ToJson(playerData);
        PlayerPrefs.SetString("PlayerData", data);
    }
}

PlayerPrefs.SetString的用法

PlayerPrefs.SetString是 Unity 提供的一个静态方法,用于设置保存在玩家偏好设置中的字符串值。该方法接受两个参数:键和值。键是一个字符串,用于标识要设置的值,而值是一个字符串,表示要保存的值。以下是示例代码:

`
// 设置字符串值
PlayerPrefs.SetString("PlayerName", "John");

// 获取字符串值
string playerName = PlayerPrefs.GetString("PlayerName");

// 输出字符串值
Debug.Log("Player name: " + playerName);
`

在上面的示例中,我们使用PlayerPrefs.SetString方法将名为“PlayerName”的键的字符串值设置为“John”。然后,我们使用PlayerPrefs.GetString方法获取该键的字符串值,并将其存储在名为playerName的变量中。最后,我们使用Debug.Log方法将该变量的值输出到控制台。

需要注意的是,PlayerPrefs类是 Unity 提供的一个用于管理玩家偏好设置的类。它提供了一组静态方法,用于设置和获取存储在玩家偏好设置中的值。这些值会持续存储,直到您显式地将它们删除或重置为默认值。因此,PlayerPrefs类通常用于存储游戏设置、玩家偏好设置、用户界面状态等等。同时,您也应该注意到,存储在玩家偏好设置中的数据是明文存储的,因此不应该将敏感信息存储在其中。

.asset文件 和scriptableObject有什么关系

.asset文件和ScriptableObject是密切相关的,因为ScriptableObject就是 Unity 中一种可以被序列化为.asset文件的脚本对象。

ScriptableObject是一种类似于MonoBehaviour的脚本对象,但是与MonoBehaviour不同的是,ScriptableObject并没有在场景中直接存在,而是存储在磁盘上的.asset文件中。您可以通过在项目视图中创建ScriptableObject来创建.asset文件,并将ScriptableObject保存在该文件中。

ScriptableObject可以具有与MonoBehaviour类似的生命周期和序列化功能,但是由于它们不直接存在于场景中,因此它们更适合用于存储和处理数据,而不是实现游戏逻辑。使用ScriptableObject可以让您方便地存储和传递数据,而不需要担心它们的生命周期和引用问题。

以下是一个示例,演示如何使用ScriptableObject来创建.asset文件:
using UnityEngine;

// 创建 ScriptableObject 类
[CreateAssetMenu(fileName = "New Data", menuName = "Data")]
public class MyData : ScriptableObject
{
public int value;
}

// 使用 ScriptableObject 类
public class MyComponent : MonoBehaviour
{
public MyData data;

void Start()
{
    // 从 .asset 文件中读取数据
    data = Resources.Load<MyData>("MyData");
    Debug.Log("Data value: " + data.value);
}

void Update()
{
    // 修改数据并保存到 .asset 文件
    data.value += 1;
    UnityEditor.EditorUtility.SetDirty(data);
}

}

在上面的示例中,我们创建了一个名为MyData的ScriptableObject,它包含了一个公共的整数字段value。我们还创建了一个名为MyComponent的组件,并在其中包含了一个MyData类型的字段data。在Start方法中,我们从 Resources 文件夹中加载MyData的.asset文件,并将其存储在data字段中。在Update方法中,我们修改了data的值,并将其标记为已更改,以便 Unity 可以将更改保存回.asset文件。

需要注意的是,为了使用ScriptableObject来创建.asset文件,需要为ScriptableObject类添加CreateAssetMenu属性。这将使 Unity 在菜单栏中添加一个“Create”选项,使得您可以轻松地创建新的.asset文件。在示例中,我们为MyData类添加了CreateAssetMenu属性,并将其命名为“Data”。这将使 Unity 在菜单栏中添加一个名为“Data”的选项,使得您可以方便地创建新的.asset文件。

unity 配置.asset文件 相关介绍

在 Unity 中,.asset文件是一种用于保存 Unity 对象的文件格式。它是一种二进制格式,可以包含许多不同类型的 Unity 对象,例如纹理、材质、预制件、场景等等。使用.asset文件,可以方便地将这些对象存储在磁盘上,并在需要时进行访问和编辑。

.asset文件通常是通过 Unity 的编辑器创建的。要创建一个.asset文件,可以右键单击项目视图中的文件夹,选择“Create”菜单,然后选择需要创建的类型。例如,要创建一个材质,可以选择“Create->Material”。

当您创建一个.asset文件时,Unity 将会创建一个新的对象,并将其存储在.asset文件中。您可以在编辑器中打开.asset文件来查看和编辑该对象的属性。对于某些类型的对象,您还可以使用.asset文件来定义一些特定于该对象类型的参数。

.asset文件的另一个常见用途是用于存储游戏数据。例如,您可以创建一个.asset文件来存储游戏的配置设置、任务数据等等。这些数据可以在运行时加载到内存中,并且可以在游戏中动态修改。这种方法比硬编码数据更加灵活,因为您可以随时修改和保存数据,而不需要重新编译代码。

需要注意的是,.asset文件通常是二进制格式,因此不适合直接使用文本编辑器进行修改。您应该使用 Unity 的编辑器或其他编辑工具来打开和编辑.asset文件。另外,.asset文件中保存的对象可以通过脚本进行访问和操作,具有很高的灵活性和可扩展性。

unity配置.asset文件 作者:LixiSchool