Unity | 游戲數據配置

目錄

一、ScriptableObject

1.創建ScriptableObject

2.創建asset資源

3.asset資源的讀取與保存

二、Excel轉JSON

1.Excel格式

2.導表工具

(1)處理A格式Excel

(2)處理B格式Excel

三、解析Json文件

1.讀取test.json文件

四、相關插件


        在游戲開發中,策劃與程序需要有良好的配置環境來處理數據,可以直接使用ScriptableObject來處理數據,或者通過Excel轉JSON的形式將數據表直接從Excel里抓取過來,也可以使用Sqlite進行數據存儲。

一、ScriptableObject

        ScriptableObject適合數據量比較小的配置信息。每個繼承到ScriptableObject的類需要單獨在一個腳本文件中。嵌套的類需要聲明Serializable特性。

[Serializable]是C#中System命名空間下的特性,標記一個類可被序列化。序列化是指將對象轉換為字節流,以便存儲到文件、網絡傳輸或持久化數據。

[SerializeField]屬于UnityEngine命令空間,表示某個字段可以被序列化,即可以在Inspector面板中顯示。

1.創建ScriptableObject

        ScriptableObject的創建很簡單,只需要繼承ScriptableObject類并標注CreateAssetMenu特性即可。

    [CreateAssetMenu(fileName = "BackpackInfo", menuName = "Save/BackpackInfo")]public class BackpackInfo : ScriptableObject{public Item[] Items;}[System.Serializable]public class Item{public int ItemId;public int Count;}

        當然也可以嵌套類:

[CreateAssetMenu(fileName = "FurnitureConfig", menuName = "MyProj/FurnitureConfig")]
//該特性標記了ScriptableObject的基本信息,只有加入該特性,腳本才能以文件對象的形式被創建
public class FurnitureScriptableObject : ScriptableObject
{[Serializable]      //聲明是序列化類public class FurnitureInfo{public string DisplayName;        //顯示名稱public string Url;                //url地址public Vector3 Pos;               //位置}public FurnitureInfo[] furnitureInfoArray; //家具信息數組對象
}

2.創建asset資源

         編寫完成上述腳本后就可以在Project面板的右鍵菜單中創建了,可以將創建的data.asset資源存放到Resources文件夾下,方便讀取及保存。

        生成的data.asset文件是yaml語法,類似的有TagManager.asset等。 

YAML的基本語法規則包括:大小寫敏感、使用縮進表示層級關系、禁止使用制表符縮進,且每個縮進級別應保持一致。

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:m_ObjectHideFlags: 0m_CorrespondingSourceObject: {fileID: 0}m_PrefabInstance: {fileID: 0}m_PrefabAsset: {fileID: 0}m_GameObject: {fileID: 0}m_Enabled: 1m_EditorHideFlags: 0m_Script: {fileID: 11500000, guid: 3969674121eab4a928178bee57fc1452, type: 3}m_Name: datam_EditorClassIdentifier: furnitureInfoArray:- DisplayName: Url: Pos: {x: 0, y: 0, z: 0}- DisplayName: Url: Pos: {x: 0, y: 0, z: 0}

3.asset資源的讀取與保存

    FurnitureScriptableObject furnitureScriptableObject;public void GetDataFromLocal(){furnitureScriptableObject = Resources.Load<FurnitureScriptableObject>("_TempData/data");}/// <summary>/// 修改家具位置/// </summary>/// <param name="pos"></param>public void ChangePos(Vector3 pos){//這里只是舉例說明,實際情況建議根據ID來修改if (furnitureScriptableObject.furnitureInfoArray.Length > 0){furnitureScriptableObject.furnitureInfoArray[0].Pos = pos;}SavePlayerInfoToLocal();}/// <summary>/// 保存數據到本地/// </summary>private void SavePlayerInfoToLocal(){// 標記資源為“臟”(表示需要保存)
#if UNITY_EDITORUnityEditor.EditorUtility.SetDirty(furnitureScriptableObject);// 手動保存資源UnityEditor.AssetDatabase.SaveAssets();
#endif}

二、Excel轉JSON

        對于一些數據量比較大的配置信息,可以通過Excel導入數據的處理方式。

1.Excel格式

        常見的Excel配置表有兩種格式:

  • A格式:每行代表名稱、類型、客戶端/服務端使用標識、描述

  •  B格式:以名稱|類型來配置,讀取時代碼來進行字符串處理(當然也可以添加描述等信息):

2.導表工具

        首先需要編寫一個中間程序,使用EPPlus去讀Excel文件并取出前幾列的數據作為數據字段定義,并按照模板生成.cs文件和json序列化文件。

(1)處理A格式Excel

        提前寫了一個ConfigBase類作為父類,每個Excel的Sheet生成的類都繼承該類。

using System.Collections.Generic;
using Modules.Common.UniUtils;
using Newtonsoft.Json;
using UnityEngine;namespace PetBuddy
{public class ConfigBase{public int ID;private static ConfigBase _instance;protected Dictionary<int, ConfigBase> ToDictionary = new Dictionary<int, ConfigBase>();private static Dictionary<string, ConfigBase> _configs = new Dictionary<string, ConfigBase>();public static T GetConfigById<T>(int id) where T : ConfigBase, new(){var name = typeof(T).Name;name = name.Replace("Config", "");if (!_configs.ContainsKey(name)){var config =

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74131.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74131.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74131.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025信創即時通訊排行:安全合規與生態適配雙輪驅動

隨著信息技術應用創新&#xff08;信創&#xff09;戰略的深化&#xff0c;國產即時通訊工具在政企市場的滲透率顯著提升。2025年作為“十四五”規劃收官之年&#xff0c;信創產業迎來規模化應用關鍵節點。本文將從認證標準、市場表現、技術架構、行業適配四大維度&#xff0c;…

關于TVS管漏電流的問題?

問題描述&#xff1a; 在量產的帶電池故事機生產中&#xff0c;工廠產線測試電流時&#xff0c;有1臺機器電流比正常機器大10mA左右。 原因分析&#xff1a; 1、分析電路原理圖&#xff0c;去除可能出現問題的電壓或器件&#xff08;不影響系統&#xff09;&#xff0c;發現…

RAG 架構地基工程-Retrieval 模塊的系統設計分享

目錄 一、知識注入的關鍵前奏——RAG 系統中的檢索綜述 &#xff08;一&#xff09;模塊定位&#xff1a;連接語言模型與知識世界的橋梁 &#xff08;二&#xff09;核心任務&#xff1a;四大關鍵問題的協調解法 &#xff08;三&#xff09;系統特征&#xff1a;性能、精度…

Java-servlet(七)詳細講解Servlet注解

Java-servlet&#xff08;七&#xff09;詳細講解Servlet注解 前言一、注解的基本概念二、Override 注解2.1 作用與優勢2.2 示例代碼 三、Target 注解3.1 定義與用途3.2 示例代碼 四、WebServlet 注解4.1 作用4.2 示例代碼 五、反射與注解5.1 反射的概念5.2 注解與反射的結合使…

機器學習——分類、回歸、聚類、LASSO回歸、Ridge回歸(自用)

糾正自己的誤區&#xff1a;機器學習是一個大范圍&#xff0c;并不是一個小的方向&#xff0c;比如&#xff1a;線性回歸預測、卷積神經網絡和強化學都是機器學習算法在不同場景的應用。 機器學習最為關鍵的是要有數據&#xff0c;也就是數據集 名詞解釋&#xff1a;數據集中的…

本地AI大模型工具箱 Your local AI toolkit:LMStudio

LMStudio介紹 官網&#xff1a;LM Studio - Discover, download, and run local LLMs LMStudio 是一個面向機器學習和自然語言處理的&#xff0c;旨在使開發者更容易構建和部署AI語言模型的應用軟件。 LMStudio的特點是&#xff1a; 完全本地離線運行AI大模型 可以從Huggi…

[OpenCV】相機標定之棋盤格角點檢測與繪制

在OpenCV中&#xff0c;棋盤格角點檢測與繪制是一個常見的任務&#xff0c;通常用于相機標定。 棋盤格自定義可參考: OpenCV: Create calibration pattern 目錄 1. 棋盤格角點檢測 findChessboardCorners()2. 棋盤格角點繪制 drawChessboardCorners()3. 代碼示例C版本python版本…

redis的典型應用 --緩存

Redis最主要的用途&#xff0c;分為三個方面&#xff1a; 1.存儲數據&#xff08;內存數據庫&#xff09; 2.緩存&#xff08;最常用&#xff09; 3.消息隊列 緩存 (cache) 是計算機中的?個經典的概念。核?思路就是把?些常?的數據放到觸?可及(訪問速度更快)的地?&…

本地基于Ollama部署的DeepSeek詳細接口文檔說明

前文&#xff0c;我們已經在本地基于Ollama部署好了DeepSeek大模型&#xff0c;并且已經告知過如何查看本地的API。為了避免網絡安全問題&#xff0c;我們希望已經在本地調優的模型&#xff0c;能夠嵌入到在本地的其他應用程序中&#xff0c;發揮本地DeepSeek的作用。因此需要知…

基于ArcGIS和ETOPO-2022 DEM數據分層繪制全球海陸分布

第〇部分 前言 一幅帶有地理空間參考、且包含海陸分布的DEM圖像在研究區的繪制中非常常見&#xff0c;本文將實現以下圖像的繪制 關鍵步驟&#xff1a; &#xff08;1&#xff09;NOAA-NCEI官方下載最新的ETOPO-2022 DEM數據 &#xff08;2&#xff09;在ArcGIS&#xff08;…

自動化測試框架pytest+requests+allure

Pytest requests Allure 這個框架基于python的的 Pytest 進行測試執行&#xff0c;并結合 Allure插件 生成測試報告的測試框架。采用 關鍵字驅動 方式&#xff0c;使測試用例更加清晰、模塊化&#xff0c;同時支持 YAML 文件來管理測試用例&#xff0c;方便維護和擴展。 測試…

Retrofit中scalars轉換html為字符串

簡介 在Retrofit中&#xff0c;如果你想直接獲取HTML或其他文本格式的響應內容而不是將其映射到一個模型類&#xff0c;ScalarsConverterFactory 就派上用場了。ScalarsConverterFactory 是一個轉換器工廠&#xff0c;它能夠將響應體轉換為Java基本類型如String、Integer或Byte…

Powershell WSL Windows系統復制數據到ubuntu子系統系統

從本地D盤下拷貝數據到ubuntu子系統下 Powershell 管理員打開執行 /mnt/d 此處是本地Windows系統的路徑表示/opt ubutu 子系統目錄 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/從ubuntu子系統中拷貝數據到本地D盤下 Powershell 管理員打開執行…

【多線程】線程安全集合類,ConcurrentHashMap實現原理

文章目錄 線程安全集合類解決方案多線程環境使用順序表多線程環境使用隊列多線程環境使用哈希表ConcurrentHashMap1. 縮小鎖的粒度2. 充分使用 CAS3. 針對擴容操作 線程安全集合類 ArrayList、Queue、HsahMap… 都是線程不安全的 Vector、Stack、Hashtable 都是線程安全的&am…

spring-tx筆記

編程式事務與聲明式事務的理解 補充&#xff1a;什么是事務&#xff1f; 事務是一個重要概念&#xff0c;尤其在數據庫管理系統中。事務是指一組操作。&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部不執行&#xff0c;確保數據的一致性和完整性 編程式事務 編…

Android第四次面試(Java基礎篇)

一、Java 中的 DCL 單例模式 單例模式是設計模式中最常用的模式之一&#xff0c;其核心目標是確保一個類在程序中僅有一個實例&#xff0c;并提供全局訪問點。在 Java 中&#xff0c;實現單例模式需要兼顧線程安全和性能優化。DCL&#xff08;Double-Checked Locking&#xff0…

Java-SpringBootWeb入門、Spring官方腳手架連接不上解決方法

一. Spring 官網&#xff1a;Spring | Home Spring發展到今天已經形成了一種開發生態圈&#xff0c;Spring提供了若干個子項目&#xff0c;每個項目用于完成特定的功能(Spring全家桶) Spring Boot可以幫助我們非常快速的構建應用程序、簡化開發、提高效率 。 二. Spring Boot入…

1.7 無窮小的比較

1.定義 2.性質 3.無窮小的比較 3.1等價無窮小的性質 3.2 常見等價無窮小

StarRocks 升級注意事項

前段時間升級了生產環境的 StarRocks&#xff0c;從 3.3.3 升級到了 3.3.9&#xff0c;期間還是踩了不少坑所以在這里記錄下。 因為我們的集群使用的是存算分離的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以沒法按照官方的流程進入虛…

深入探究 JVM 堆的垃圾回收機制(一)— 判活

垃圾回收分為兩步&#xff1a;1&#xff09;判定對象是否存活。2&#xff09;將“消亡”的對象進行內存回收。 1 判定對象存活 可達性分析算法&#xff1a;通過一系列“GC Roots”對象作為起始節點集&#xff0c;從這些節點開始&#xff0c;根據引用關系向下搜索&#xff0c;…