[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)

 

[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)_第1张图片

using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;


[CreateAssetMenu(menuName = "Leoyang/DataUnity", fileName = "CreatData")]
public class PackageTable : ScriptableObject
{
    public List DatatList=new List();
}
[System.Serializable]
public class ObjectInformation
{

    public string name;
    public int ID;
    public string DescriptObj;
}

这段代码是针对 Unity 引擎的脚本,用于创建包含物品信息的数据表。

1. `CreateAssetMenu` 属性:
   - 这个属性是 Unity 引擎的特殊标记,用于在 Unity 菜单中创建该类型的对象。`menuName` 指定了在菜单中的位置,`fileName` 指定了在创建对象时的默认文件名。

2. `PackageTable` Unity 内置类:
   - `PackageTable` 类继承自 `ScriptableObject`,这是一个 Unity 提供的特殊类可以在编辑器中创建和管理数据。
   - `List DatatList` 是一个包含 `ObjectInformation` 对象的列表,用于存储物品信息。

3. `ObjectInformation` 自定义类:
   - `ObjectInformation` 是一个用于存储单个物品信息的自定义类。
   - 它包含了物品的名称 (`name`)、ID (`ID`) 和描述 (`DescriptObj`) 等字段,用于描述和标识不同的游戏物品。

这段代码的作用是创建一个可以在 Unity 编辑器中创建和管理的数据表,其中可以存储多个物品的信息,比如名称、ID 和描述等。通过 `PackageTable` 类的 `DatatList` 可以轻松地添加、编辑和删除 `ObjectInformation` 类的对象,这些对象可以在游戏中使用,比如用于管理背包物品或者游戏中的其他数据。

`ScriptableObject` 是 Unity 引擎中的一个特殊类,它允许在编辑器中创建可序列化的对象,用于存储数据、配置游戏资源、或者创建自定义编辑器工具等。下面详细介绍它的属性、功能和一个简单的案例:

### 属性:

- **可序列化:** `ScriptableObject` 类的对象可以被序列化和存储在 Unity 资源文件中,能够在不同场景和关卡之间进行持久化。
  
- **无需挂载到 GameObject:** 与 MonoBehaviour 不同,ScriptableObject 并不需要附加到场景中的游戏对象上,因此它们不受场景的影响,更适合用于存储数据或资源。

### 功能:

- **数据存储和配置:** 可以用来保存游戏的数据,例如存储关卡信息、物品属性、对话内容等。也可用于配置资源,如配置文件、技能数据、AI行为树等。

- **可编辑:** 可在 Unity 编辑器中创建、编辑和管理对象的属性和数据。这使得开发人员可以方便地调整数据而无需直接修改代码。

- **易于扩展:** 可以创建自定义编辑器工具,利用 `ScriptableObject` 创建可重复使用的资源,提高了代码的复用性。

### 案例:

以下是一个简单的 `ScriptableObject` 示例,演示了如何创建和使用它:
 

using UnityEngine;

[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{
    public string characterName;
    public int health;
    public int attackDamage;
    public Sprite characterSprite;
}

- 这个示例中的 `CharacterData` 类继承自 `ScriptableObject`。
- 使用 `[CreateAssetMenu]` 属性,指定了在 Unity 菜单中创建该类型对象时的位置和名称。
- `CharacterData` 类定义了一些角色的属性,如角色名、生命值、攻击伤害和角色的精灵图像。

通过这种方式,可以在 Unity 编辑器中创建名为 Character Data 的资源文件,包含了角色的属性信息。然后可以在游戏中通过引用这些 `CharacterData` 对象来获取或配置角色属性,例如在游戏中创建角色、设置角色的生命值和攻击力等。

一旦你创建了 `ScriptableObject` 类型的数据对象并设置了其中的属性,你可以通过代码在游戏中访问这些属性。以下是一种简单的方法:

假设你已经创建了一个名为 `CharacterData` 的 `ScriptableObject` 类,里面包含了角色的属性,比如:

using UnityEngine;

[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{
    public string characterName;
    public int health;
    public int attackDamage;
    public Sprite characterSprite;
}

然后,在你的代码中,你可以通过如下方式获取这些数据:


public class CharacterManager : MonoBehaviour
{
    public CharacterData characterData; // 这个是你创建的 CharacterData 对象

    void Start()
    {
        // 示例:输出角色的名字和生命值
        Debug.Log("Character Name: " + characterData.characterName);
        Debug.Log("Character Health: " + characterData.health);
        
        // 可以根据需要使用角色数据做其他操作,比如改变角色的属性、加载对应的角色模型等。
    }
}


 

这段代码展示了如何在 `CharacterManager` 类中获取 `CharacterData` 对象的属性。通过将 `CharacterData` 对象赋值给 `characterData` 属性,你可以在 `Start` 或其他需要的地方访问其中的属性。可以根据具体需求,使用这些数据来配置游戏中的角色属性、加载对应的精灵图像或者其他处理。

你可能感兴趣的:(Unity第二阶段,lucene,全文检索,搜索引擎)