检查是否遗漏固定节点:
[MenuItem(@"Tools/【美术专用】/检查特效绑定节点", false, 90)]
static void CheckEffectBindPos()
{
var prefabs = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/LoadableRes/Prefabs/Hero/Spine2D" });
EditorUtility.DisplayProgressBar("", "", 0);
var index = 0;
StringBuilder sb = new StringBuilder();
foreach (var prefab in prefabs)
{
var path = AssetDatabase.GUIDToAssetPath(prefab);
++index;
EditorUtility.DisplayProgressBar("", path, index * 1f / prefabs.Length);
var root = AssetDatabase.LoadAssetAtPath<GameObject>(path);
if (root != null)
{
CheckEftObj(root);
}
}
EditorUtility.ClearProgressBar();
File.WriteAllText("d:\\scene.txt", sb.ToString(), Encoding.UTF8);
}
private static void CheckEftObj(GameObject gameObject)
{
var transform = gameObject.transform;
var mark01 = transform.Find(Const.MARK_01);
if (mark01 == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.MARK_01}节点");
var mark02 = transform.Find(Const.MARK_02);
if (mark02 == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.MARK_02}节点");
var mark03 = transform.Find(Const.MARK_03);
if (mark03 == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.MARK_03}节点");
var mark04 = transform.Find(Const.MARK_04);
if (mark04 == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.MARK_04}节点");
var HeadTrans = transform.Find(Const.NORMAL_HEAD);
if (HeadTrans == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.NORMAL_HEAD}节点");
var m_FootTrans = transform.Find(Const.NORMAL_FOOT);
if (m_FootTrans == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.NORMAL_FOOT}节点");
var m_BloodPos = transform.Find(Const.BLOODPOS);
if (m_BloodPos == null)
{
UnityEngine.Debug.LogError($"{transform.name}没有血条节点,用本体代替");
}
var m_EmojiPosLeft = transform.Find(Const.EMOJIPOSLEFT);
if (m_EmojiPosLeft == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.EMOJIPOSLEFT}节点");
var m_EmojiPosRight = transform.Find(Const.EMOJIPOSRIGHT);
if (m_EmojiPosRight == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.EMOJIPOSRIGHT}节点");
var m_KeZhiRoot = transform.Find(Const.RESTRAINT);
if (m_KeZhiRoot == null)
UnityEngine.Debug.LogError($"{transform.name}没有{Const.RESTRAINT}节点");
var sk = transform.GetComponent<SkeletonAnimation>();
if (sk == null || sk.skeleton == null)
{
UnityEngine.Debug.LogError($"{transform.name}没有spine");
return;
}
var bone_weapon = sk.skeleton.FindBone(Const.BONE_WEAPON);
var bone_head = sk.skeleton.FindBone(Const.BONE_HEAD);
var bone_body = sk.skeleton.FindBone(Const.BONE_BODY);
var bone_spirit = sk.skeleton.FindBone(Const.BONE_SPIRIT);
var bone_mount = sk.skeleton.FindBone(Const.BONE_MOUNT);
if (bone_weapon == null)
{
UnityEngine.Debug.LogError(gameObject.name + "骨骼上没有名为bone_sp_wepon_01的节点");
}
if (bone_head == null)
{
UnityEngine.Debug.LogError(gameObject.name + "骨骼上没有名为bone_sp_head_01的节点");
}
if (bone_body == null)
{
UnityEngine.Debug.LogError(gameObject.name + "骨骼上没有名为bone_sp_body_01的节点");
}
if (bone_spirit == null)
{
UnityEngine.Debug.LogError(gameObject.name + "骨骼上没有名为bone_sp_spirit_01的节点");
}
if (bone_mount == null)
{
UnityEngine.Debug.LogError(gameObject.name + "骨骼上没有名为bone_sp_mount_01的节点");
}
}
Const常量值:
public class Const
{
public const string MARK_01 = "eff/bone_nor_mark_01";
public const string MARK_02 = "eff/bone_nor_mark_02";
public const string MARK_03 = "eff/bone_nor_mark_03";
public const string MARK_04 = "eff/bone_nor_mark_04";
public const string NORMAL_HEAD = "eff/bone_nor_head_01";
public const string NORMAL_FOOT = "eff/bone_nor_foot_01";
public const string BONE_WEAPON = "bone_sp_wepon_01";
public const string BONE_HEAD = "bone_sp_head_01";
public const string BONE_BODY = "bone_sp_body_01";
public const string BONE_SPIRIT = "bone_sp_spirit_01";
public const string BONE_MOUNT = "bone_sp_mount_01";
public const string BLOODPOS = "ui/bone_health";
public const string EMOJIPOSLEFT = "ui/bone_mood_left";
public const string EMOJIPOSRIGHT = "ui/bone_mood_right";
public const string RESTRAINT = "ui/bone_weak";
}