美术资源工具 unity内查找特定预制体是否有子级
unity内工具 待机勾选循环和查找特定预制体是否有子级
区分查找美术资源内有无特定子级,比如:根据资源内不同hero的类型(近远程)不一样,attack下有无子级作为区分,快速查找attack下有无子级。
上部分为循环动作待机‘standby’勾选循环
下部AAA/BBB为子级查找
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
public class ArtAssetTool
{
[MenuItem("工具/美术资源工具/批量修改待机动画片段的循环状态")]
public static void CheckAnimationClip()
{
StringBuilder modifiedInfo = new StringBuilder();
string[] allPaths = AssetDatabase.GetAllAssetPaths();
foreach (var path in allPaths)
{
if (Path.GetFileName(path).Contains("standby") && Path.GetFileName(path).Contains(".anim"))
{
AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(path);
AnimationClipSettings settings = AnimationUtility.GetAnimationClipSettings(clip);
if (!settings.loopTime)
{
modifiedInfo.AppendLine(path);
settings.loopTime = true;
AnimationUtility.SetAnimationClipSettings(clip, settings);
}
}
}
AssetDatabase.SaveAssets();
if (modifiedInfo.Length > 0)
Debug.Log("完成了以下片段的修改:\n" + modifiedInfo.ToString());
else
Debug.Log("未找到没有设置为循环的待机动画片段");
}
[MenuItem("AAA/BBB")]
public static void GetAllHeroAttack()
{
string[] allHeroPath = Directory.GetFiles("Assets/Main/Part0/Model/Hero", "*.prefab");
foreach (var heroPath in allHeroPath)
{
GameObject heroObj = AssetDatabase.LoadAssetAtPath<GameObject>(heroPath);
Transform atkEfsParent = heroObj.transform.Find("AttackPoint/Attack");
if(atkEfsParent)
{
Debug.Log(Path.GetFileName(heroPath) + " - " + atkEfsParent.childCount);
}
//Debug.Log(heroPath);
}
}
}