Unity .asset文件采坑

突然发现unity可以将类直接保存在本地,可以用作某些设置的配置信息。而且选中这个文件,可以在unity编辑器Inspector中看到,常见的int,string,list都可以直接实例化出来,非常方便。因此我就直接拿来试验一下。

首先,创建一个.asset文件,网上文章一大把,但是其中8成的人都只直接复制别人的。我这里也简单说一下,直接上代码。

public class ShaderReplaceData : ScriptableObject
{    
    public List<string> whiteList = new List<string>();      
        
    public List<string> blackList = new List<string>();     

}

要保存的类,需要继承ScriptableObject,然后里面就可以随便搞了,不过写完后要在编辑器界面看看,能不能显示出来,能显示出来最好,不能显示出来,例如Dictionary 类型就不行了。

在这里插入图片描述
可以直接在编辑器上编辑数据,非常方便。

创建也很简单

void GetAssetData()
    {
        srData = AssetDatabase.LoadAssetAtPath<ShaderReplaceData>(infoPath);
        if (srData == null)
        {            
            srData = ScriptableObject.CreateInstance<ShaderReplaceData>();
            Debug.Log("new ShaderReplaceData");
        }                
                
        Debug.Log("get data over");
    }

文件直接使用AssetDatabase.LoadAssetAtPath加载文件然后把类实例出来,如果是第一次,没有这个文件,就使用ScriptableObject.CreateInstance实例化这个数据类。

接下来是保存这个文件,注意,网上大部分都告诉你是第一次保存这个文件,是没有问题的,但是第二次保存就出问题了,编辑器会报错的。先看代码

AssetDatabase.CreateAsset(data, infoPath);

data是你的类,infoPath是一个string类型的地址,这样就保存了,不过第二次保存就会报错,要这样修改一下就好了。

void SaveAssetData()
    {
        ShaderReplaceData data = ScriptableObject.CreateInstance<ShaderReplaceData>();
        data.blackList = srData.blackList;
        data.whiteList = srData.whiteList;
        AssetDatabase.DeleteAsset(infoPath);
        AssetDatabase.CreateAsset(data, infoPath);              

        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
       
        Debug.Log(infoPath + " save over");             
    }

在保存这个文件前,要先删除掉旧的文件,我不知道怎么修改里面的内容,因此我采取了简单粗暴的方法,直接删除旧的,创建一份新的文件。但是删除旧文件后,直接的实例化后的数据类也没有了,必须在删除文件之前再弄个类,然后把数据给备份出来。这样删除后,创建新的.asset文件时,将之前备份好的数据写进去就ok了。

最后,还有一个坑,如果你之前一直好好的,然后关闭unity后,再次打开,发现这个.asset文件显示缺失script,你随便修改了几行代码,编译了一下脚本文件,发现这个.asset文件居然又好了,那就是掉坑里的。你创建的这个数据类型,必须单独的保存在一个cs文件中,且这个cs文件类名与文件名一致,还要与你的.asset文件名字一样,否则就会出这样的问题。这样要感谢一个大兄弟之前踩的坑。

采坑传送门

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值