using System.Collections;
using System.Collections.Generic;
using Thousandto.Code.Center;
using Thousandto.DIY;
using UnityEditor;
using UnityEngine;
///
/// AssetPostProcessorExternal: 贴图、模型、声音等资源导入时调用,可自动设置相应参数
/// 导入图片时自动设置图片的参数
///
public class AssetPostProcessorExternal : AssetPostprocessor
{
void OnPreprocessAnimation()
{
var path = assetImporter.assetPath;
if (path.Contains("RawResources/player"))
{
AnimationClip oldAnim = null;
if(FuncellEditorStartup.AnimDic != null && FuncellEditorStartup.AnimDic.TryGetValue(path, out oldAnim))
{
GameObject.DestroyImmediate(oldAnim);
}
//加载此动作
var anim = AssetDatabase.LoadAssetAtPath(assetImporter.assetPath);
if(FuncellEditorStartup.AnimDic != null && anim != null)
{
GameObject.DontDestroyOnLoad(anim);
FuncellEditorStartup.AnimDic[path] = anim;
}
}
}
//模型导入之前调用
public void OnPreprocessModel()
{
Debug.Log("OnPreprocessModel=" + this.assetPath);
}
//模型导入之前调用
public void OnPostprocessModel(GameObject go)
{
Debug.Log("OnPostprocessModel=" + go.name);
}
public void OnPostprocessAudio(AudioClip clip)
{
Debug.Log("OnPostprocessAudio=" + clip.name);
}
public void OnPreprocessAudio()
{
Debug.Log("OnPostprocessAudio=" + this.assetPath);
//AudioImporter audio = this.assetImporter as AudioImporter;
//audio.format = AudioImporterFormat.Compressed;
}
///
/// 图片导入之前调用,可设置图片的格式、Tag……
///
void OnPreprocessTexture()
{
//特效的纹理导入时,对iphone格式进行调整.
if (this.assetPath.Replace('\\','/').IndexOf("vfx/fxresources/texture/") >=0)
{
TextureImporter texImporter = (TextureImporter)assetImporter;
TextureImporterPlatformSettings pset = new TextureImporterPlatformSettings();
pset.name = "iPhone";
pset.overridden = false;
pset.format = TextureImporterFormat.Automatic;
pset.textureCompression = TextureImporterCompression.Compressed;
texImporter.SetPlatformTextureSettings(pset);
}
Debug.Log("OnPreProcessTexture=" + this.assetPath);
}
///
/// 图片已经被压缩、保存到指定目录下之后调用
///
///
void OnPostprocessTexure(Texture2D texture)
{
Debug.Log(texture.name);
}
///
/// 所有资源被导入、删除、移动完成之后调用
///
///
///
///
///
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
foreach (string str in importedAssets)
{
Debug.Log("Reimported Asset: " + str);
if (!Application.isPlaying)
return;
if (str.Contains("GameAssets/Resources/Lua"))
{
ReLoadLuaFile(str, "UI/Forms/");
ReLoadLuaFile(str, "Logic/");
if (str.Contains("KeyCodeSystem"))
{
GameCenter.LuaSystem.DoString("KeyCodeSystem = nil;Utils.RemoveRequiredByName(\"Common.CustomLib.KeyCodeSystem\");KeyCodeSystem = require(\"Common.CustomLib.KeyCodeSystem\")");
}
}
}
foreach (string str in deletedAssets)
{
Debug.Log("Deleted Asset: " + str);
}
for (int i = 0; i < movedAssets.Length; i++)
{
Debug.Log("Moved Asset: " + movedAssets[i] + " from: " + movedFromAssetPaths[i]);
}
}
//重新加载Lua脚本
static void ReLoadLuaFile(string assetPath, string folder)
{
if (!assetPath.Contains(folder))
return;
string path = "";
string name = GetName(assetPath, folder, out path);
GetFilesPath(path, folder);
if(folder == "UI/Forms/")
GameCenter.LuaSystem.Adaptor.RenewForm(name, GetFilesPath(path, folder));
else if(folder == "Logic/")
{
GameCenter.LuaSystem.Adaptor.RenewSystem(name, GetFilesPath(path, folder));
}
}
static string GetName(string assetPath, string folder, out string filePath)
{
int startIndex = assetPath.IndexOf(folder);
int nameStartIndex = startIndex + folder.Length;
var str2 = assetPath.Substring(nameStartIndex);//UINewServerListForm\UIServerListPanel\UIServerCharItem.lua
int nameEndIndex = str2.IndexOf("/") + nameStartIndex - 1;
string name = assetPath.Substring(nameStartIndex, nameEndIndex - nameStartIndex + 1);
//Debug.Log("name >>>>>>>>> " + name);
filePath = assetPath.Substring(0, nameEndIndex + 1);
//Debug.Log("path >>>>>>>>> " + filePath);
return name;
}
static string[] GetFilesPath(string path,string folder)
{
var dirctory = new System.IO.DirectoryInfo(path);
int startIndex = dirctory.FullName.Replace("\\", "/").LastIndexOf(folder);
var files = dirctory.GetFiles("*", System.IO.SearchOption.AllDirectories);
List pathList = new List();
for (int i = 0; i < files.Length; i++)
{
if (files[i].Name.EndsWith(".meta")) continue;
//Debug.Log("FullName:" + files[i].FullName.Replace("\\", "/"));
var itemName = files[i].FullName.Replace("\\", "/");
var itemPath = itemName.Substring(startIndex, itemName.LastIndexOf(".lua") - startIndex).Replace("/", ".");
pathList.Add(itemPath);
//Debug.Log("========================= " +i+" , "+ itemPath);
}
return pathList.ToArray();
}
}