检查特效绑定节点

该代码段是一个Unity3D脚本,用于检查Prefab中特定的美术资源节点是否存在。它遍历指定目录下的Prefabs,检测每个对象及其子对象中是否包含了一系列预设的transform节点和骨骼节点。如果发现缺失,脚本将记录错误并在控制台输出警告信息。
摘要由CSDN通过智能技术生成

检查是否遗漏固定节点:

[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";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值