UnityEditor代码创建prefab

 

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;

public class CreatPrefab
{

    [MenuItem("Tools/创建prefab")]
    static void CreatPrefabTools()
    {
        //用代码创建一个 GameObject
        GameObject _obj = new GameObject("test_script_Creat_Obj");

        Creat(_obj, "Assets/Resources");

        //删除创建用代码创建的 GameObject
        GameObject.DestroyImmediate(_obj,true);

        //刷新
        AssetDatabase.Refresh();
    }

    [MenuItem("GameObject/创建prefab",false,-100)]
    static void CreatSelectPrefabTools()
    {
        //在 Hierarchy 窗口选取要保存的 GameObject
        GameObject[] _objs = Selection.gameObjects;
        for (int i = 0; i < _objs.Length; i++)
        {
            GameObject _obj = _objs[i];
            Creat(_obj, "Assets/Resources");
        }

        //刷新
        AssetDatabase.Refresh();
    }

    /// <summary>
    /// 创建prefab
    /// </summary>
    /// <param name="obj">传入的prefab</param>
    /// <param name="directory">文件夹路径</param>
    /// <param name="objName">文件名称(可选填)</param>
    static void Creat(GameObject obj,string directory, string objName = "")
    {
        //判断传入的数据 是否为空
        if(obj== null || string.IsNullOrEmpty(directory))
        {
            return;
        }
        //检测文件夹是否存在
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        //保存时的文件名称
        string _name = objName;

        if (string.IsNullOrEmpty(objName))
        {
            _name = obj.name;
        }

        //拼接的文件名称
        _name = string.Concat(_name, ".prefab");

        //拼接路径
        string _path = Path.Combine(directory, _name);

        //移除原有prefab
        AssetDatabase.DeleteAsset(_path);

        //保存prefab
        PrefabUtility.SaveAsPrefabAssetAndConnect(obj, _path, InteractionMode.UserAction);

        //解除绑定联系(要是留绑定关系,可以注释此行代码)
        PrefabUtility.UnpackPrefabInstance(obj, PrefabUnpackMode.Completely, InteractionMode.UserAction);

    }
}

最开始

 

 运行  CreatPrefabTools 方法后

 运行  CreatSelectPrefabTools 方法后

 

posted @ 2024-04-11 13:33  OldWu  阅读(54)  评论(0)    收藏  举报