创建Prefab

本文介绍了一个Unity编辑器窗口脚本,用于自定义并生成带有特定组件的预制物。用户可以指定预制物名称、标签、图层,并选择添加SpriteRenderer、BoxCollider2D等组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using UnityEngine;
using UnityEditor;
using System.Collections;

public class SpawnPrefab : EditorWindow
{
[MenuItem (“PrefabTools/SpawnPrefab”)]
public static void ShowWindow ()
{
EditorWindow.GetWindow (typeof(SpawnPrefab));
}

private static string prefabName;
private static string prefabTag;
private static int prefabLayer;
private static string prefabPath = "Assets/Resources/Prefab/";
private static bool isAddSpriteRenderer = false;
private static bool isAddUIAtlas = false;
private static bool isAddBoxCollider = false;
private static bool isAddGetCommponent = false;
private static bool isAddRigidbody2D = false;
private static bool isAddChildGameObject = false;
private static string childPrefabName;

void OnGUI ()
{
    PrefabInfo ();
    EditorGUILayout.Space();
    EditorGUILayout.Space();
    PrefabCommponent ();
    EditorGUILayout.Space();
    EditorGUILayout.Space();
    AddChildGameObject ();
    EditorGUILayout.Space();
    EditorGUILayout.Space();

// PrefabPath ();
EditorGUILayout.Space();
CreatButton ();
}

static void PrefabInfo(){
    prefabName = EditorGUILayout.TextField ("预设名字: ", prefabName);
    prefabTag = EditorGUILayout.TagField("预设tag:",prefabTag);
    prefabLayer = EditorGUILayout.LayerField("预设layer:",prefabLayer);
}

static void PrefabCommponent(){
    isAddSpriteRenderer = GUILayout.Toggle (isAddSpriteRenderer, "是否添加SpriteRenderer组件");
    isAddBoxCollider = GUILayout.Toggle (isAddBoxCollider, "是否添加BoxCollider组件");
    isAddGetCommponent = GUILayout.Toggle (isAddGetCommponent, "是否添加GetCommponent组件");
    isAddRigidbody2D = GUILayout.Toggle (isAddRigidbody2D, "是否添加Rigidbody2D组件");
    isAddUIAtlas = GUILayout.Toggle (isAddUIAtlas, "是否添加UIAtlas组件");
}

static void AddChildGameObject(){
    isAddChildGameObject = GUILayout.Toggle (isAddChildGameObject, "是否添加子物体");
    childPrefabName = EditorGUILayout.TextField ("预设子物体名字: ", childPrefabName);
}

static void PrefabPath(){
    prefabPath = EditorGUILayout.TextField ("预设保存路径,需自己设置: ", prefabPath);
}

static void CreatButton(){
    if (GUILayout.Button ("生成预设在Hierarchy中", GUILayout.Height (20))) {
        if (prefabName != null) {
            CreatePrefab (prefabName,childPrefabName);
        }
    }
}

static void CreatePrefab (string name,string childName)
{
    //获取所有被选中的物体

// Object[] selection=(Object[])Selection.objects;
// if(selection.Length==0) return;

    GameObject prefab = new GameObject (name);

// GameObject prefab = (GameObject)Instantiate((GameObject)PrefabUtility.CreatePrefab (prefabPath + name + “.prefab”, (GameObject)obj));
// GameObject prefab = (GameObject)Instantiate(obj);

    if (isAddSpriteRenderer) {
        prefab.AddComponent<SpriteRenderer> ();
    }
    if (isAddUIAtlas) {
        prefab.AddComponent<UIAtlas> ();
    }

    if (isAddBoxCollider) {
        prefab.AddComponent<BoxCollider2D> ();
    }

    if (isAddGetCommponent) {
        prefab.AddComponent<GetCommponent> ();
    }

    if (isAddRigidbody2D) {
        prefab.AddComponent<Rigidbody2D> ();
    }

    if (isAddChildGameObject) {
        GameObject childPrefab = new GameObject (childName);
        childPrefab.transform.SetParent (prefab.transform);
    }

    prefab.tag = prefabTag;
    prefab.layer = prefabLayer;
    Debug.Log (">>>>>>>>>>>>>>>>>>>>成功生成预设物体: " + name + ">>>>>>>>>>>>>>>>>>>>>>>");

    AssetDatabase.Refresh ();
}


void OnInspectorUpdate ()
{
    Repaint ();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值