Unity编辑器工具_一键生成/修改预制体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
 
public class Tool
{
    static Dictionary<int, Table_item> items_ID = TableManager.Getitem();
    static Dictionary<string, Table_item> items_Name = new Dictionary<string, Table_item>();
 
    [MenuItem("Menu/一键导入道具信息", false, 1)]
    public static void 一键导入道具信息()
    {
        //---------------------表格初始化,并读取到字典中---------------------------//
        //此处使用的自己的文件读取方式,可以按各自的读取方式进行修改
        TableManager.Initialize();
        items_ID = TableManager.Getitem();
        items_Name.Clear();
        foreach (var item in items_ID)
        {
            items_Name.Add(item.Value.EnName, item.Value);
        }
 
        //---------------------创建文件夹和预制体(一定要优先创建,之后好做关联)---------------------------//
        foreach (var item in items_Name)
        {
            string path = "Assets/Resources/" + item.Value.FileName;
            string filePath = path + "/" + item.Value.EnName + ".Prefab";
 
            //判断预制体所在的文件夹是否存在,若不存在则创建
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
 
            //当前预制体
            GameObject Target = AssetDatabase.LoadAssetAtPath(filePath, typeof(GameObject)) as GameObject;
                    //预制体不存在
            if (!Target)
            {
                GameObject newGameObject = new GameObject();
                 
                //新建预制体的处理,例如添加脚本,数据初始化,可以才是用switch来分别对不同的预制体添加不同的脚本
 
                PrefabUtility.SaveAsPrefabAsset(newGameObject, filePath);
                GameObject.DestroyImmediate(newGameObject);
            }
                   else   
                   {
                       Target = PrefabUtility.InstantiatePrefab(Target) as GameObject;
 
                        //此处进行预制体的修改,依旧使用Switch来获取对应脚本来进行数据替换
                         
                        PrefabUtility.SaveAsPrefabAsset(Target, filePath);
                        GameObject.DestroyImmediate(Target);
                   }
        }
        //保存修改
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
  
  

  

posted @   多见多闻  阅读(1086)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示