Unity 在開(kāi)發(fā)的時(shí)候如果數(shù)據(jù)量比較大,或者一部分?jǐn)?shù)據(jù)需要存在云端,那么就需要一些數(shù)據(jù)庫(kù)
輕量型到大型的包括:
數(shù)組-內(nèi)存存儲(chǔ)讀取
列表-內(nèi)存存儲(chǔ)讀取? ?List<T> tList = new List<T>();
XML-硬盤(pán)存儲(chǔ)讀取
JSON-硬盤(pán)存儲(chǔ)讀取
Sqlite-輕量數(shù)據(jù)庫(kù)(意思就是免安裝)-云服務(wù)器、硬盤(pán)存儲(chǔ)讀取SQLite 入門(mén)教程 - 菜鳥(niǎo)教程
Mysql-關(guān)系型數(shù)據(jù)庫(kù)(需安裝本地或云服務(wù)器)-云服務(wù)器、硬盤(pán)存儲(chǔ)讀取
Redis-非關(guān)系型數(shù)據(jù)庫(kù)-輕量級(jí)免安裝-云服務(wù)器、硬盤(pán)存儲(chǔ)讀取
Oracle-系型數(shù)據(jù)庫(kù)(需安裝本地或云服務(wù)器)-云服務(wù)器、硬盤(pán)存儲(chǔ)讀取
......
?
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "Leoyang/DataUnity", fileName = "CreatData")]
public class PackageTable : ScriptableObject
{
public List<ObjectInformation> DatatList=new List<ObjectInformation>();
}
[System.Serializable]
public class ObjectInformation
{
public string name;
public int ID;
public string DescriptObj;
}
這段代碼是針對(duì) Unity 引擎的腳本,用于創(chuàng)建包含物品信息的數(shù)據(jù)表。
1. CreateAssetMenu?屬性:
? ?這個(gè)屬性是 Unity 引擎的特殊標(biāo)記,用于在 Unity 菜單中創(chuàng)建該類(lèi)型的對(duì)象。`menuName` 指定了在菜單中的位置,`fileName` 指定了在創(chuàng)建對(duì)象時(shí)的默認(rèn)文件名。
[CreateAssetMenu(menuName = "Leoyang/DataUnity", fileName = "CreatData")]
代碼效果:
2. `PackageTable` Unity 內(nèi)置類(lèi):
PackageTable` 類(lèi)繼承自 `ScriptableObject`,這是一個(gè) Unity 提供的特殊類(lèi),可以在編輯器中創(chuàng)建和管理數(shù)據(jù)。
List<ObjectInformation> DatatList` 是一個(gè)包含 `ObjectInformation` 對(duì)象的列表,用于存儲(chǔ)ObjectInformation類(lèi)型的物品信息。
3. ObjectInformation?自定義類(lèi):
ObjectInformation`是一個(gè)用于存儲(chǔ)單個(gè)物品信息的自定義類(lèi)。
?它包含了物品的名稱 (`name`)、ID (`ID`) 和描述 (`DescriptObj`) 等字段,用于描述和標(biāo)識(shí)不同的游戲物品。
這段代碼的作用是創(chuàng)建一個(gè)可以在 Unity 編輯器中創(chuàng)建和管理的數(shù)據(jù)表,其中可以存儲(chǔ)多個(gè)物品的信息,比如名稱、ID 和描述等。通過(guò) `PackageTable` 類(lèi)的 `DatatList` 可以輕松地添加、編輯和刪除 `ObjectInformation` 類(lèi)的對(duì)象,這些對(duì)象可以在游戲中使用,比如用于管理背包物品或者游戲中的其他數(shù)據(jù)。
創(chuàng)建完畢后就可以使用了,存儲(chǔ)信息
4.ScriptableObject類(lèi)詳細(xì)講解
`ScriptableObject` 是 Unity 引擎中的一個(gè)特殊類(lèi),它允許在編輯器中創(chuàng)建可序列化的對(duì)象,用于存儲(chǔ)數(shù)據(jù)、配置游戲資源、或者創(chuàng)建自定義編輯器工具等。下面詳細(xì)介紹它的屬性、功能和一個(gè)簡(jiǎn)單的案例:
- **可序列化:** `ScriptableObject` 類(lèi)的對(duì)象可以被序列化和存儲(chǔ)在 Unity 資源文件中,能夠在不同場(chǎng)景和關(guān)卡之間進(jìn)行持久化。
??
- **無(wú)需掛載到 GameObject:** 與 MonoBehaviour 不同,ScriptableObject 并不需要附加到場(chǎng)景中的游戲?qū)ο笊?,因此它們不受?chǎng)景的影響,更適合用于存儲(chǔ)數(shù)據(jù)或資源。
### 功能:
- **數(shù)據(jù)存儲(chǔ)和配置:** 可以用來(lái)保存游戲的數(shù)據(jù),例如存儲(chǔ)關(guān)卡信息、物品屬性、對(duì)話內(nèi)容等。也可用于配置資源,如配置文件、技能數(shù)據(jù)、AI行為樹(shù)等。
- **可編輯:** 可在 Unity 編輯器中創(chuàng)建、編輯和管理對(duì)象的屬性和數(shù)據(jù)。這使得開(kāi)發(fā)人員可以方便地調(diào)整數(shù)據(jù)而無(wú)需直接修改代碼。
- **易于擴(kuò)展:** 可以創(chuàng)建自定義編輯器工具,利用 `ScriptableObject` 創(chuàng)建可重復(fù)使用的資源,提高了代碼的復(fù)用性。
### 案例:
以下是一個(gè)簡(jiǎn)單的 `ScriptableObject` 示例,演示了如何創(chuàng)建和使用它:
?
using UnityEngine;
[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{
? ? public string characterName;
? ? public int health;
? ? public int attackDamage;
? ? public Sprite characterSprite;
}
- 這個(gè)示例中的 `CharacterData` 類(lèi)繼承自 `ScriptableObject`。
- 使用 `[CreateAssetMenu]` 屬性,指定了在 Unity 菜單中創(chuàng)建該類(lèi)型對(duì)象時(shí)的位置和名稱。
- `CharacterData` 類(lèi)定義了一些角色的屬性,如角色名、生命值、攻擊傷害和角色的精靈圖像。
通過(guò)這種方式,可以在 Unity 編輯器中創(chuàng)建名為 Character Data 的資源文件,包含了角色的屬性信息。然后可以在游戲中通過(guò)引用這些 `CharacterData` 對(duì)象來(lái)獲取或配置角色屬性,例如在游戲中創(chuàng)建角色、設(shè)置角色的生命值和攻擊力等。
一旦你創(chuàng)建了 `ScriptableObject` 類(lèi)型的數(shù)據(jù)對(duì)象并設(shè)置了其中的屬性,你可以通過(guò)代碼在游戲中訪問(wèn)這些屬性。以下是一種簡(jiǎn)單的方法:
假設(shè)你已經(jīng)創(chuàng)建了一個(gè)名為 `CharacterData` 的 `ScriptableObject` 類(lèi),里面包含了角色的屬性,比如:
using UnityEngine;
[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data")]
public class CharacterData : ScriptableObject
{
? ? public string characterName;
? ? public int health;
? ? public int attackDamage;
? ? public Sprite characterSprite;
}
然后,在你的代碼中,你可以通過(guò)如下方式獲取這些數(shù)據(jù):
public class CharacterManager : MonoBehaviour
{
? ? public CharacterData characterData; // 這個(gè)是你創(chuàng)建的 CharacterData 對(duì)象
? ? void Start()
? ? {
? ? ? ? // 示例:輸出角色的名字和生命值
? ? ? ? Debug.Log("Character Name: " + characterData.characterName);
? ? ? ? Debug.Log("Character Health: " + characterData.health);
? ? ? ??
? ? ? ? // 可以根據(jù)需要使用角色數(shù)據(jù)做其他操作,比如改變角色的屬性、加載對(duì)應(yīng)的角色模型等。
? ? }
}
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-765051.html
這段代碼展示了如何在 `CharacterManager` 類(lèi)中獲取 `CharacterData` 對(duì)象的屬性。通過(guò)將 `CharacterData` 對(duì)象賦值給 `characterData` 屬性,你可以在 `Start` 或其他需要的地方訪問(wèn)其中的屬性??梢愿鶕?jù)具體需求,使用這些數(shù)據(jù)來(lái)配置游戲中的角色屬性、加載對(duì)應(yīng)的精靈圖像或者其他處理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-765051.html
到了這里,關(guān)于[Unity數(shù)據(jù)管理]自定義菜單創(chuàng)建Unity內(nèi)部數(shù)據(jù)表(ScriptableObject)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!