Unity 導入項目tag與layer的方法

 

UnityEditor》AssetPostprocessor 控制導入的腳本ui

 

類中的方法字段spa

public string assetPath { get; set; }ip

public AssetImporter assetImporter { get; }get

public Texture2D preview { get; set; }string

 

public virtual int GetPostprocessOrder();it

public virtual uint GetVersion();io

public void LogError(string warning);class

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

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;

    }

}

相關文章
相關標籤/搜索