码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3d的导入资源的后处理管理机制

时间:2015-04-08 09:10:36      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:unity3d   utf8   csv   json   后处理   

孙广东   2015.4.8

在unity中任何资源被导入都会被我们获取到, 这时我们就可以对这些资源做判断,和相应的处理!

我这个例子是要 检查游戏中的一些配置文件,格式必须是Utf-8的编码格式,如果不是就强转换为Utf-8

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

//-----------------------------------------------------------------------
// <copyright file="LocaleEditorWindow.cs" company="">
//     Copyright (c) Sprocket Enterprises. All rights reserved.
// </copyright>
// <author> SunGuangDong </author>
//
// <summary>
/// 导入资源的后处理管理机制
/// 可以检查出不合法的资源导入,可以进行更改
// </summary>
//-----------------------------------------------------------------------

public class AssetsPostManager : AssetPostprocessor
{

    static string basePath = Application.dataPath.Substring(0, Application.dataPath.Length - "Assets".Length);

    static void OnPostprocessAllAssets(           // 这个函数必须为静态的,其他可以不是!
        string[] importedAssets,
        string[] deletedAssets,
        string[] movedAssets,
        string[] movedFromAssetPaths)
    {
        foreach (var path in importedAssets)
        {
            // 判断文件是不是配置文件 .csv, json的.txt (个人角色json的配置文件就是以.json为后缀名是最为合理的!)
            if (path.EndsWith(".csv") || path.EndsWith(".txt") || path.EndsWith(".json"))
            {
                string tempP = basePath + path;
                System.Text.Encoding encode;
                using (System.IO.FileStream fs = new System.IO.FileStream(tempP, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                {
                     encode = GetFileEncodeType(fs);
                }

                if (System.Text.Encoding.UTF8 != encode)
                {
                    EditorLog.LogWarning("亲!配置文件" + tempP + "的编码格式不是UTF-8格式呦");
                    //// 转为 utf-8
                    //string str = File.ReadAllText(path, Encoding.Default);   // 转换没有问题, UTF8读就是乱码!!!
                    //File.WriteAllText(tempP, str, Encoding.UTF8);           
                }
            }
        }
        //		for (var i=0;i<movedAssets.Length;i++)
        //			Debug.Log("Moved Asset: " + movedAssets[i] + " from: " + movedFromAssetPaths[i]);
    }

    /// <summary>
    /// 判断配置文件的编码格式是不是utf-8
    /// </summary>
    /// <returns>The file encode type.</returns>
    /// <param name="filename">文件全路径.</param>
    /// 代码中没判断内容是不是空
    /// 检查时,csv文件不能用 office打开(因为独占)
    static public System.Text.Encoding GetFileEncodeType(System.IO.FileStream fs)
    {
        System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
        byte[] buffer = br.ReadBytes(2);

        if (buffer[0] >= 0xEF)
        {
            if (buffer[0] == 0xEF && buffer[1] == 0xBB)
            {
                return System.Text.Encoding.UTF8;
            }
            else if (buffer[0] == 0xFE && buffer[1] == 0xFF)
            {
                return System.Text.Encoding.BigEndianUnicode;
            }
            else if (buffer[0] == 0xFF && buffer[1] == 0xFE)
            {
                return System.Text.Encoding.Unicode;
            }
            else
            {
                return System.Text.Encoding.Default;
            }
        }
        else
        {
            return System.Text.Encoding.Default;
        }
        br.Close();
        fs.Close();
    }


}


Unity3d的导入资源的后处理管理机制

标签:unity3d   utf8   csv   json   后处理   

原文地址:http://blog.csdn.net/u010019717/article/details/44935559

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!