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

好好扮演自己的角色,做自己该做的事

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

相关文章:

你感兴趣的文章:

标签云: