unity3d 动态将预制体资源加载到配置文件之中去

老廖
2021-09-06 / 0 评论 / 24 阅读 / 正在检测是否收录...
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
/// <summary>
/// 生成新的映射表
/// </summary>
//Editor类:属于Unity编辑器代码,一般使用该功能则存在Editor这个文件夹下并继承Editor
//特点:1.程序发布出去时,不会将Editor文件夹的内容 打包出去
              //2.只能在Unity中Editor(编辑器)使用
//作用:1.扩展菜单项
       //   2.在运行以前生成所需要的资源文件
public class GenerateResConfig : Editor
{
    [MenuItem("SkillTools/Generate/ResConfig")]
    public static void Generate()
    {
        Debug.Log("执行了~!");
        //获取Resource文件夹下所有的预制体的路径
        //类型:prefab
        //FindAssets该方法可以用来查找Unity内置的所有资源
        //第一个参数代表 根据什么类型来查找
        //第二个参数代表 从哪个具体的文件下找,因为是数组所以如果
        //需要在多个文件夹下找 则中间用逗号隔开书写正确路径

        //通过该方法查找的资源 都会返回GUID 资源编号
        var Guid = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/Resources" });
        //资源编号 --------- 资源路径
        //GUIDoAssetPath根据传入的资源编号返回该编号对应资源路径
        for (int i = 0; i < Guid.Length; i++)
        {
            //依次转换路径并存入对应的数组空间内
            Guid[i] = AssetDatabase.GUIDToAssetPath(Guid[i]);
            //"Assets/Resources/Skill/SectorAttackSkill.prefab"
            //练习:将每个路径 改变成一下规格并对应存入数组空间内
            //SectorAttackSkill = Skill/SectorAttackSkill

            //GetFileNameWithoutExtension 该方法传入一个路径返回不带后缀名的文件
            //"Assets/Resources/Skill/SectorAttackSkill.prefab"

            //传入路径
            //下面这个方法 最后返回的是SectorAttackSkill
            string str = Path.GetFileNameWithoutExtension(Guid[i]);
            //下面这行代码把Assets/Resources/删除掉在把.prefab删除掉   最后path存储的是Skill/SectorAttackSkill
            string path = Guid[i].Replace("Assets/Resources/", null).Replace(".prefab", null);
            Guid[i] = string.Format("{0}={1}", str, path);
            //占位符使用 场景  比如  "{0}={1}",插入的第一个字符,插入的第二个字符
            //比如我调用string.Format("{0}={1}",13,14);
            //最后输出结果为13=14
           // Debug.Log(Guid[i]); 
        }
        //------------------------
        //在将拿到的内容写成txt文件到StreamingAssets文件中。
        File.WriteAllLines(Application.streamingAssetsPath + "/Config.txt", Guid);
        //刷新
        AssetDatabase.Refresh();
      
    }

}
1

评论 (0)

取消