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 方法后


浙公网安备 33010602011771号