前言
最近需要写一个自动化脚本,每一次手动右键Create Prefab Variant之后还得自己添加一些必须的组件,然后赋值,就很麻烦,所以写一个自动化生成Prefab Variant并且添加对应组件的工具。
百度了下,好像没有搜到相关的逻辑,所以问了问ChatGPT(真好用),然后根据自己的需求做了修改
实现代码
很简单,直接上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public static class CreatePrefabVariant
{
private const string MenuItemName = "Assets/Create Prefab Variant";
[MenuItem(MenuItemName, false, 25)]
public static void Create()
{
var origin_prefab = Selection.activeObject as GameObject;
var origin_guid = Selection.assetGUIDs[0];
string origin_prefab_path = AssetDatabase.GUIDToAssetPath(origin_guid);
// 创建一个新的 Prefab Variant
GameObject prefab_var_in_hierarchy = PrefabUtility.InstantiatePrefab(origin_prefab) as GameObject;
int dot_index = origin_prefab_path.LastIndexOf('.');
string new_prefab_path = origin_prefab_path.Substring(0, dot_index) + "_prefab.prefab";
// 将新 Prefab Variant 保存到项目中
GameObject prefab_var_in_project = PrefabUtility.SaveAsPrefabAsset(prefab_var_in_hierarchy, new_prefab_path);
// 销毁场景中的新对象
GameObject.DestroyImmediate(prefab_var_in_hierarchy);
//可以自己在代码中添加组件
AddComp(prefab_var_in_project);
}
private static void AddComp(GameObject go)
{
var box_col = go.AddComponent<BoxCollider>();
}
}