网站公告 | 泰斗网校全新上线了,可以和论坛用户登录同步,如果遇到登录问题联系管理员解决
查看: 2611|回复: 2
收起左侧

[即步] Unity自定义配置文件

[复制链接]

[即步] Unity自定义配置文件[复制链接]

13007234056 发表于 2017-4-21 15:27:05 [显示全部楼层] 回帖奖励 |倒序浏览 |阅读模式 回复:  2 浏览:  2611
本帖最后由 13007234056 于 2017-4-25 17:53 编辑

原文地址:http://m.blog.csdn.net/article/details?id=69676780阅读原文,获取源码!!!

配置资源文件估计大家了解很多,比如XML、JSON、Protobuf、Excel、TXT等等
在开发过程中,将游戏数据序列化到配置文件中,项目运行时读取配置文件中的数据
本文另外介绍一个Unity的配置文件(.asset)
该配置文件的优点:
当我们需要将游戏资源里的贴图(Texture)、游戏对象(Gameobject)等预设体保存到配置文件时,这时我们就可以使用该配置文件
但是当关联的预设体丢失时,需要重新将预设体关联起来
接下来,我写了一个Demo,介绍在Unity3D创建自定义配置资源文件点击打开链接
【管理类】
创建一个管理类,提供函数来创建和读取配置文件(.asset)
在这里我已经简单的封装好了,大家下载来后直接使用即可

[AppleScript] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;

public class CustomConfigManager<T> where T : ScriptableObject//对泛型参数进行约束,使其只能是ScriptableObject的派生类
{

    private static CustomConfigManager<T> _instance;

    public static CustomConfigManager<T> GetInstance
    {
        get
        {
            if(_instance==null)
            {
                _instance=new CustomConfigManager<T>();
            }

            return _instance;
        }
    }

    private CustomConfigManager()
    { 
    }

    /// <summary>
    /// 将类实例化为配置文件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static void CreateAsset()
    {
        //将对象实例化
        ScriptableObject so = ScriptableObject.CreateInstance(typeof(T));

        if (so == null)
        {
            Debug.Log("该对象无效,无法将对象实例化");
            return;
        }

        //自定义配置资源路径
        string path = Application.dataPath + "/CustomConfigFile/MyFile";

        //判断该路径是否存在,不存在的话创建一个
        if (Directory.Exists(path)==false)
        {
            Directory.CreateDirectory(path);
        }


        //配置文件以.asset结尾
        //将对象名配置成与类名相同
        path = string.Format("Assets/CustomConfigFile/MyFile/{0}.asset",typeof(T).ToString());

        //按指定路径生成配置文件
        AssetDatabase.CreateAsset(so,path);
    }


    /// <summary>
    /// 将配置文件转化为对象
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static void GetAsset()
    {
        //配置文件名与对象名一致
        string name = typeof(T).ToString();
        string path = string.Format("Assets/CustomConfigFile/MyFile/{0}.asset",name);

        // 将配置文件转化为对象
        T obj = AssetDatabase.LoadAssetAtPath<T>(path);
    }
}

【创建可序列化类(演示)】

[AppleScript] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using System;

public enum MyEnum
{
    START,
    PAUSE
}

/// <summary>
/// 该类可以序列化
/// </summary>
[Serializable]
public class CustomConfig : ScriptableObject//继承ScriptableObject
{
    //需要实例化的变量将其设置为public或者设置其属性为[Serializable]
    public MyEnum me = MyEnum.START;

    public Texture interge;

    [Range(0,10)]
    public float f;

    public GameObject obj;
}

【测试】
创建一个Editor文件夹,将脚本添加到其中
创建好的管理类后,直接调用即可

[AppleScript] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using UnityEditor;

public class MySelfText : MonoBehaviour 
{
    [MenuItem("AssetCreateOrGet/Create")]
    public static void Create()
    {
        CustomConfigManager<CustomConfig>.CreateAsset();
    }

    [MenuItem("AssetCreateOrGet/Get")]
    public static void Get()
    {
        CustomConfigManager<CustomConfig>.GetAsset();
    }
}

点击按钮,成功创建配置文件
Project视图:
Inspector视图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
+1
2607°C
2
  • 丶邪恶馒馒酱
  • jpsxno1
过: 他们
因分享而快乐,学习以自强!
丶邪恶馒馒酱 发表于 2017-5-8 16:05:43 显示全部楼层
{:6_150:} 好东西~mark学习之
因分享而快乐,学习以自强!
jpsxno1 发表于 2018-9-3 17:34:01 显示全部楼层
因分享而快乐,学习以自强!
因分享而快乐,学习以自强!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VR/AR版块|Unity3d|Unreal4|新手报道|小黑屋|站点地图|沪ICP备14023207号-9|【泰斗社区】-专注互联网游戏和应用的开发者平台 ( 浙ICP 备 13006852号-15 )|网站地图

© 2001-2013 Comsenz Inc.  Powered by Discuz! X3.4

1
QQ