Unity将Excel文件转化成ScriptableObject和ScriptableObject文件的使用

一:前言

因为工作需要,程序要求和策划,编剧对接时,一般以excel文件交接,但是如果直接存取excel文件,则会导致占的内存过多,于是,将excel文件转化成unity自带的ScriptableObject格式势在必行,ScriptableObject的读取非常便利,可以大大的优化效率。

本文将手把手教你学会如何将Excel文件转化成ScriptableObject将Excel文件转化成ScriptableObject,并附上插件地址以便于下载,且将教会你怎样在unity读取ScriptableObject文件。

CSDN下载:【免费】UnityExcel文件转化成ScriptObject插件资源-CSDN文库

百度网盘:https://pan.baidu.com/s/1o1ub3531boKEYCd1rEKZZw?pwd=dczd
提取码:dczd

二:实现

1.先将插件导入项目

2.导入要转化的Excel文件(文件夹随意)

但是转化出的ScriptObject文件会跟它会在同一个文件夹里,且会与Excel同名。

显然,测试Excel文件叫UnData,里面有两张表,一张表叫unversities,另一张表叫majors

表名特别重要!!!要与下面的创建的ScriptObject继承类中的属性一一对应。

第一行数据为属性名,比如unversities表中有三个属性,id,unName,description

3.创建对应的可序列化的对象类

Entity中存放的是可序列化的对象类

(1)Major类

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

[Serializable]
public class Major
{
    public int id;
    public string majorName;
    public string description;
}

(2)Unversity类

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

[Serializable]
public class Unversity
{
    public int id;
    public string unName;
    public string description;
}

4.创建与Excel文件同名的ScriptObject继承类

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

[ExcelAsset]
public class UnData : ScriptableObject
{
	public List<Unversity> unversities; 
	public List<Major> majors; 
}

类中的属性unversities,majors必须与Excel文件中的表名一一对应,否则会失败。

三:实现成果

1.转化文件

右键要转化的Excel文件,选择重新导入自动转化

或者修改保存Excel文件也会自动转化。

文件转化成功将会自动增加到同一个文件夹中

导入成功的话控制台也会有显示

点击新增加的文件就会看到导入结果了

2.ScriptObject文件加载

创建一个C#脚本,并把它挂载到场景中随意一个物体上

(1)在Resources文件夹中加载

private UnData unData;

void Start()
{
    unData = (UnData)Resources.Load<ScriptableObject>("Datas/UnData");
}

(2)直接在unity编辑器中拖拽

但是要将private改成public才能在unity编辑器中显示

3.获取数据

可直接获取到数据

string name = unData.unversities[0].unName;
Unity使用Instantiate()方法克隆ScriptableObject文件时出现卡顿的可能原因有几种。 首先,ScriptableObjectUnity中一种用于存储和共享数据的可编程对象。它的实例化过程可能需要分配额外的内存和执行复杂的初始化代码,从而导致卡顿。 其次,如果ScriptableObject文件较大,克隆时可能需要花费较长时间读取和复制文件内容,从而导致卡顿。这种情况下,可以尝试使用异步操作或延迟加载的方式来减少卡顿的程度。 另外,如果克隆ScriptableObject的操作发生在游戏运行时,而不是编辑器环境中,那么卡顿可能是由于主线程被阻塞而引起的。在游戏运行时进行大量的克隆操作会导致帧率下降,从而造成卡顿。为了解决这个问题,可以考虑将克隆操作放在后台线程中执行,或者使用对象池技术来重复利用已创建的ScriptableObject实例。 最后,如果在克隆ScriptableObject时发起了大量其他操作,例如其他GameObject的实例化或计算密集型任务,也可能导致卡顿。在这种情况下,可以尝试优化代码逻辑,减少额外操作的数量,或者将它们分散到多个帧中执行,以减轻卡顿的影响。 综上所述,Unity使用Instantiate()方法克隆ScriptableObject文件出现卡顿的原因可能是ScriptableObject的初始化过程、文件读取和复制耗时、主线程阻塞以及其他操作的影响。可以采取异步操作、延迟加载、后台线程执行、对象池技术、优化代码逻辑等方法来减轻卡顿的程度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winlife_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值