Unity 导入项目tag与layer的方法

 

UnityEditor》AssetPostprocessor 控制导入的脚本

 

类中的方法字段

public string assetPath { get; set; }

public AssetImporter assetImporter { get; }

public Texture2D preview { get; set; }

 

public virtual int GetPostprocessOrder();

public virtual uint GetVersion();

public void LogError(string warning);

public void LogError(string warning, [DefaultValue("null")] UnityEngine.Object context);

public void LogWarning(string warning);

public void LogWarning(string warning, [DefaultValue("null")] UnityEngine.Object context);

 

可以注意下projectsetting 下的assets 文件的数据

以下时TagManger的数据

 

这些内容手动配置是无法更改引擎内的数据的

 

//Mono挂在网上的脚本新版本存在两个问题

>layer 层 在index8之后才能设置

>tag 默认size0

可能时mono 16年的帖子针对5x版本可行但是针对17版本不可执行

 

 

 

代码:

using UnityEditor;

 

public class M_LayerExtent : AssetPostprocessor {

 

    static string TagsAdd = "momo&yang";

    static string TagsLayer = "ruoruo&hang";

    private const string ScriptsPath = "Assets/Editor/M_LayerExtent.cs";

 

    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)

    {

        foreach (string s in importedAssets)

        {

            //此脚本需要存在的路径

            if (s.Equals(ScriptsPath))

            {

                string[] tags = TagsAdd.Split('&');

                string[] Layers = TagsLayer.Split('&');

                foreach (var tag in tags) AddTag(tag);

                foreach (var layer in Layers) AddLayer(layer);

                //Debug.Log("loading....");

                return;

            }

        }

    }

 

    static void AddTag(string tag)

    {

        if (!isHasTag(tag))

        {           

            SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);

            SerializedProperty it = tagManager.GetIterator();

            //Debug.Log("prop is:"+it);

            while (it.NextVisible(true))

            {

                if (it.name == "tags")

                {

                    //Debug.Log("NextVisible is:" + it.name+" size is:"+it.arraySize);

 

                    it.arraySize++;

 

                    for (int i = 0; i < it.arraySize; i++)

                    {

                       

                        SerializedProperty dataPoint = it.GetArrayElementAtIndex(i);

                        //Debug.Log("loading.... " + dataPoint.stringValue);

                        if (string.IsNullOrEmpty(dataPoint.stringValue))

                        {

                            dataPoint.stringValue = tag;

                            tagManager.ApplyModifiedProperties();

                            //Debug.Log("is loading tag");

                            return;

                        }

                    }

                }

            }

        }

    }

    

    static void AddLayer(string layer)

    {

        if (!isHasLayer(layer))

        {

            SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);

            SerializedProperty it = tagManager.GetIterator();

            while (it.NextVisible(true))

            {

                //Debug.Log("prop is:"+ it.name);

                if (it.name == "layers")                                         

                {

                    for (int i = 0; i < it.arraySize; i++)

                    {

                        SerializedProperty dataPoint = it.GetArrayElementAtIndex(i+1);

                        //Debug.Log("loading.... " + dataPoint.stringValue+"  i:"+i);

                        //默认前把层无法设置

                        if (string.IsNullOrEmpty(dataPoint.stringValue)&&i>=8)

                        {

                           

                            dataPoint.stringValue = layer;

                            tagManager.ApplyModifiedProperties();

                            //Debug.Log("is loading layer");

                            return;

                        }

                    }

                }

                

            }

        }

    }

 

    static bool isHasTag(string tag)

    {

        for (int i = 0; i < UnityEditorInternal.InternalEditorUtility.tags.Length; i++)

        {

            if (UnityEditorInternal.InternalEditorUtility.tags[i].Contains(tag))

                return true;

        }

        return false;

    }

 

    static bool isHasLayer(string layer)

    {

        for (int i = 0; i < UnityEditorInternal.InternalEditorUtility.layers.Length; i++)

        {

            if (UnityEditorInternal.InternalEditorUtility.layers[i].Contains(layer))

                return true;

        }

        return false;

    }

}

 

转载于:https://www.cnblogs.com/yangxiaohang/p/8623646.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值