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

孙广东   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();
    }

}
时间: 2024-08-11 07:49:38

Unity3d的导入资源的后处理管理机制的相关文章

导入资源 Unity3D笔记(二)

三维格式文件:.fbx .dae .3ds .dxf .obj  ;导入资源所在路径不能有中文: 主流三维软件: Autodesk Maye (3D建模.动画.特效.渲染等电影级别的).Autodesk 3D Studio Max(三维动画渲染和制作).Modo(曲面.建模.雕刻.3D绘图.动画.渲染等综合型强).Cinema 4D(运算速度和强大的渲染插件)Cheetah3D(3D建模和渲染).LightWave(生物建模.角色动画).Blender(建模.动画.材质.渲染.音频.视频.内建P

unity3d教程游戏包含的一切文件导入资源

http://www.58player.com/blog-2327-954.html 导入资源 将文件增加至工程文件夹的资源 (Assets) 文件夹后,Unity 将自动检测文件.将任何资源 (Assets) 放入资源文件夹后,资源 (Assets) 将显现在工程视图 (Project View) 中.   此工程视图 (Project View) 是显现资源 (Assets) 文件夹的窗口,一般可从文件管理器 (file manager) 中找到它 收拾工程视图 (Project View)

spring3-spring的事务管理机制

1. Spring的事务管理机制 Spring事务管理高层抽象主要包括3个接口,Spring的事务主要是由他们共同完成的: PlatformTransactionManager:事务管理器-主要用于平台相关事务的管理 TransactionDefinition: 事务定义信息(隔离.传播.超时.只读)-通过配置如何进行事务管理. TransactionStatus:事务具体运行状态-事务管理过程中,每个时间点事务的状态信息. 1.1. PlatformTransactionManager事务管理

windows内存详解(一) 全面介绍Windows内存管理机制及C++内存分配实例

十分感谢MS社区的帖子,讲得很好~ http://social.technet.microsoft.com/Forums/zh-CN/2219/thread/afc1269f-fe08-4dc7-bb94-c395d607e536 (一):进程空间 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本文目的: 对Windows内存管理机制了解清楚,有效的利用C+

全面介绍内存管理机制

全面介绍Windows内存管理机制及C++内存分配实例 十分感谢MS社区的帖子,讲得很好~ http://social.technet.microsoft.com/Forums/zh-CN/2219/thread/afc1269f-fe08-4dc7-bb94-c395d607e536 (一):进程空间 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本文目的

苹果系统iOS、macOS应用管理机制

iOS.macOS系统应用管理机制 苹果系统包括:iOS.macOS.watchOS.tvOS.应用软件的生命周期为:开发.上线.安装.使用.卸载.这篇文档将从应用生命周期的各个环节介绍苹果系统对应用的管理机制,主要详细介绍iOS和macOS,watchOS与tvOS由于用户数量少,以及流程与iOS相似度较高,只作了简单介绍. iOS 一.开发 注册账号: 单纯开发是不用付费的,使用模拟器就可以.如果要真机调试,或者提交appstore,需要申请开发者帐号. 需要提交:1.注册一个苹果账号作为开

untiy3d action管理机制的编写

使用unity3d对于一些可视化强迫者来说,是一个不错的选择,但unity3d没有cocos2d的action管理机制,比如cocos2dx的CCMoveTo,CCScale等action,所以笔者通过封装action管理来实现类似cocos2dx的actionmanager. 首先需要写一个ActionManager来创建.更新.移除所有action.编写代码实现如下: using UnityEngine;using System.Collections;using System; publi

Unity3D技术之资源数据库 (AssetDatabase)详解

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 资源数据库 (AssetDatabase)资源数据库 (AssetDatabase) 是允许您访问工程中的资源的 API.此外,其提供方法供您查找和加载资源,还可创建.删除和修改资源.Unity 编辑器 (Editor) 在内部使用资源数据库 (AssetDatabase) 追踪资源文件,并维护

Linux内存管理机制

一.首先大概了解一下计算机CPU.Cache.内存.硬盘之间的关系及区别. 1.  CPU也称为中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路, 是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要是解释计算机指令以及处理计算机软件中的数据.中央处理器主要由三核心部件组成,运算器.控制器和总线(BUS),运算器又主要由算术逻辑单元(ALU)和寄存器(RS)组成. 2.Cache即高速缓冲存储器,是位于CPU与主内存