Unity学习笔记--怎么用代码自动化Create Prefab Variant

目录

    • 前言
    • 实现代码

前言

最近需要写一个自动化脚本,每一次手动右键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>();
    }
}

你可能感兴趣的:(Unity学习笔记,unity,学习,自动化)