需求分析
??在實(shí)際工作過程中,美術(shù)資源并不總是按照預(yù)想的方式提交的萝衩。隨著項(xiàng)目的增大,資源管理混亂產(chǎn)生的影響也會成倍地增加葡兑。有些團(tuán)隊(duì)的做法是給相關(guān)負(fù)責(zé)人檢查無誤后再提交到項(xiàng)目中。這里我們采用另一種方法赞草,使用代碼控制資源的導(dǎo)入讹堤!每當(dāng)資源導(dǎo)入項(xiàng)目后自動修改屬性、提取數(shù)據(jù)厨疙、刪除多余的資源洲守,這種策略可以節(jié)省很多時(shí)間。
案例1:初始化資源(更改屬性)
??模型美術(shù)上傳了一批角色的動作文件沾凄,經(jīng)過檢查發(fā)現(xiàn)很多動作做都有問題梗醇,有些導(dǎo)入項(xiàng)目時(shí),并沒有使用快捷鍵ctrl+D提取其中的Animction文件撒蟀;有些動作應(yīng)該是循環(huán)的叙谨,但是美術(shù)并未勾選循環(huán)。案例2:檢查資源
??新的一批模型文件再次襲來保屯,這一次都是角色模型手负,項(xiàng)目中所有人物模型,都需要一個(gè)掛點(diǎn)手部武器掛點(diǎn)姑尺,最后測試部門對所有人物模型都運(yùn)行一次后發(fā)現(xiàn)竟终,因?yàn)槿鄙龠@個(gè)掛點(diǎn),部分模型出現(xiàn)錯(cuò)誤股缸。
請把資源初始化屬性的工作交給機(jī)器,使用命令來初始化資源衡楞!
請把檢查資源的工作交給機(jī)器,使用命令來檢查資源,如果資源不符合需求則彈出錯(cuò)誤提示敦姻!
- 圖片導(dǎo)入回調(diào)
??注意腳本需要放到Editor文件夾下瘾境,才能正確被回調(diào)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class AssetPostProcessor_Test1 : AssetPostprocessor {
void OnPostprocessTexture(Texture2D texture)
{
TextureImporter import = assetImporter as TextureImporter;
Debug.Log(import.assetPath);
}
}
- 圖片導(dǎo)入后自動修改圖片格式
??注意镰惦,MipMap是用于在遠(yuǎn)離攝像機(jī)時(shí)降低圖片質(zhì)量的功能迷守,因此對于UI上的貼圖都可以關(guān)閉,以減少內(nèi)存占用旺入。
public class AssetPostProcessor_Test1 : AssetPostprocessor {
void OnPostprocessTexture(Texture2D texture)
{
TextureImporter import = assetImporter as TextureImporter;
Debug.Log(import.assetPath);
//Set mipmapEnable = false;
import.mipmapEnabled = false;
import.textureType = TextureImporterType.Sprite;
//Save The Changes
EditorUtility.SetDirty(import);
}
}
- 模型導(dǎo)入回調(diào)
public class AssetPostProcessor_Test1 : AssetPostprocessor {
void OnPostprocessModel(GameObject obj)
{
ModelImporter import = assetImporter as ModelImporter;
Debug.Log(import.assetPath);
}
}
- 拷貝動畫文件并且刪除模型文件
void OnPostprocessModel(GameObject obj)
{
ModelImporter import = assetImporter as ModelImporter;
Debug.Log(import.assetPath);
var key = "Models".ToLower();
var path = import.assetPath.ToLower();
if(!path.Contains(key))
{
EditorApplication.delayCall += HandCopyFBXAnimation;
}
}
/// <summary>
/// 處理拷貝模型動畫
/// </summary>
void HandCopyFBXAnimation()
{
EditorApplication.delayCall -= HandCopyFBXAnimation;
ModelImporter import = assetImporter as ModelImporter;
var asset = AssetDatabase.LoadAllAssetsAtPath(import.assetPath);
foreach (var clipObje in asset)
{
if (clipObje is AnimationClip && !clipObje.name.Contains("__preview__"))
{
string outputPath = Path.GetDirectoryName(import.assetPath)
+ Path.DirectorySeparatorChar + clipObje.name + ".anim";
var currentAsset = AssetDatabase.LoadAssetAtPath<AnimationClip>(outputPath);
//如果存在則覆蓋還是追加兑凿?
if (currentAsset != null)
{
EditorUtility.CopySerialized(clipObje, currentAsset);//不影響文件關(guān)聯(lián)的情況下更新文件內(nèi)容
EditorUtility.SetDirty(currentAsset);
}
//不存在則創(chuàng)建
else
{
var newAnim = new AnimationClip();
EditorUtility.CopySerialized(clipObje, newAnim);
AssetDatabase.CreateAsset(newAnim, outputPath);
}
}
}
//刪除模型
AssetDatabase.DeleteAsset(import.assetPath);
}
- 資源命名規(guī)范/工程資源路徑使用命令
命令關(guān)鍵詞(不區(qū)分大小寫) | 適用資源類型 | 作用 |
---|---|---|
[UI] | 圖片 | UI圖片資源,取消 MipMap屬性 |
[ANM] | 模型 | 拷貝動畫文件并且源模型文件 |
[LOOP] | 模型 | 設(shè)置動畫循環(huán)模式 |
[SKIP] | 所有 | 跳過所有檢查和設(shè)置 |
最后茵瘾,我們將在下一章節(jié)討論礼华,導(dǎo)入模型自動綁定材質(zhì)、使用命令檢查資源是否完整拗秘、如何批量修改資源圣絮。