可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用数据表模块使用这些数据表。
这里以读取《创建默认内置格式的数据表》中创建的数据表为例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
private void DataTableExample() { EventComponent eventComponent = GameEntry.GetComponent<EventComponent>(); // 订阅加载数据表相关的事件 eventComponent.Subscribe(UnityGameFramework.Runtime.EventId.LoadDataTableSuccess, OnLoadDataTableSuccess); eventComponent.Subscribe(UnityGameFramework.Runtime.EventId.LoadDataTableFailure, OnLoadDataTableFailure); DataTableComponent dataTableComponent = GameEntry.GetComponent<DataTableComponent>(); dataTableComponent.LoadDataTable<DRScene>("Scene", "Assets/DataTables/Scene.txt"); // 注意:不要在这里直接使用刚刚请求加载的数据表,由于资源加载是异步的,所以要在收到加载数据表成功事件后才能使用 } private void OnLoadDataTableSuccess(object sender, GameEventArgs e) { // 数据表加载成功事件 UnityGameFramework.Runtime.LoadDataTableSuccessEventArgs ne = e as UnityGameFramework.Runtime.LoadDataTableSuccessEventArgs; Log.Info("Load data table '{0}' success.", ne.DataTableName); // 这里已经可以安全地使用数据表了 DataTableComponent dataTableComponent = GameEntry.GetComponent<DataTableComponent>(); // 获得数据表 IDataTable<DRScene> dtScene = dataTableComponent.GetDataTable<DRScene>(); // 获得所有行 DRScene[] drScenes = dtScene.GetAllDataRows(); // 根据行号获得某一行 DRScene drScene = dtScene.GetDataRow(1); // 或直接使用 dtScene[1] if (drScene != null) { // 此行存在,可以获取内容了 string name = drScene.Name; string assetName = drScene.AssetName; int backgroundMusicId = drScene.BackgroundMusicId; } else { // 此行不存在 } // 获得满足条件的所有行 DRScene[] drScenesWithCondition = dtScene.GetAllDataRows(x => x.BackgroundMusicId > 0); // 获得满足条件的第一行 DRScene drSceneWithCondition = dtScene.GetDataRow(x => x.Name == "Main"); } private void OnLoadDataTableFailure(object sender, GameEventArgs e) { // 数据表加载失败事件 UnityGameFramework.Runtime.LoadDataTableFailureEventArgs ne = e as UnityGameFramework.Runtime.LoadDataTableFailureEventArgs; Log.Warning("Load data table '{0}' failure.", ne.DataTableName); } |
相关 API 参考手册
- 本文固定链接: http://gameframework.cn/archives/250
- 转载请注明: Ellan 于 Game Framework 发表
为什么我在加载的时候总是失败,还有报错。文件就是之前教程的文件,所有都是这么做的,除了文件路径,是路径有要求吗。我放在Assets里面,代码也改了的Assets/Scene.txt。报错提示空指针
NullReferenceException: Object reference not set to an instance of an object
UnityGameFramework.Runtime.DefaultDataTableHelper.ReleaseDataTableAsset (System.Object dataTableAsset)
GameFramework.DataTable.a.b (System.String A_0, System.Object A_1, Single A_2, System.Object A_3)
UnityGameFramework.Runtime.EditorResourceComponent.LoadAsset (System.String assetName, GameFramework.Resource.LoadAssetCallbacks loadAssetCallbacks, System.Object userData) (at Assets/GameFramework/Scripts/EditorResourceComponent.cs:540)
GameFramework.DataTable.a.LoadDataTable (System.String dataTableAssetName, System.Object userData)
UnityGameFramework.Runtime.DataTableComponent.LoadDataTable (System.String dataTableName, System.Type dataTableType, System.String dataTableNameInType, System.String dataTableAssetName, System.Object userData)
UnityGameFramework.Runtime.DataTableComponent.LoadDataTable[DRSence] (System.String dataTableName, System.String dataTableAssetName)
TextEvent.DataTableExample () (at Assets/TextEvent.cs:35)
TextEvent.Start () (at Assets/TextEvent.cs:16)
在这个错误之前,应该还有别的错误提示,主要问题在于没有找到 ResourceComponent 组件。
哥们,你这问题怎么解决的。能跟我说一下么
很幸运能找到一个这么规范的框架
感谢支持!
你的框架真的很棒,比较清晰写的也很规范,