Unity3d UnityEditor EditorWindow 自定义窗体控件

功能:是因为公司的模型组需要一个插件,在MAYA中有很多个复制物体,导出的时候只导出一个,其他相同的物体只导出点的位置信息。这样进入Unity里就是一个物体和N个相同物体的位置点,代码简单但是需要用插件形式,正好没研究过这方面,所以研究下Unity的插件编写。

网上的资料:http://blog.csdn.net/jjiss318/article/details/7435708

根据这篇文章,我做了个简易插件。大概思路是首先将所有带有位置信息的空物体在一个Tag下面获得,然后便利他们在他们的位置下实例化预制体。

首先建立个脚本DuplicatePrefabs。

注意要先添加UnityEditor;引用,以及继承EditorWindow

定义两个变量,一个Transform存储预制体,一个字符串存储Tag的名字


using System;
using UnityEngine;
using UnityEditor;


public class DuplicatePrefabs : EditorWindow
{
    public Transform PrefabObj;
    public string TagName="Locator";

    private GameObject[] objs;

    //设置插件在菜单栏的位置   和快捷键
    [MenuItem("Window/DuplicatePrefabs %Q")]
    //实例化窗体
    static void Init()
    {
        DuplicatePrefabs window = (DuplicatePrefabs)EditorWindow.GetWindow(typeof(DuplicatePrefabs));
        window.Show();
    }
    //用GUI画出窗体的空间布局
    void OnGUI()
    {
        GUILayout.BeginHorizontal();
        GUILayout.Label("预制体", EditorStyles.boldLabel);
        PrefabObj = EditorGUILayout.ObjectField(PrefabObj, typeof(Transform)) as Transform;
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        GUILayout.Label("标签名称",EditorStyles.boldLabel);
        TagName = EditorGUILayout.TextField(TagName,EditorStyles.boldLabel);
        GUILayout.EndHorizontal();
        if (GUILayout.Button("应用"))
        {
            fnDuplicate();
        }
    }
    /// <summary>
    /// 便利Tag下物体并实例化
    /// </summary>
    void fnDuplicate()
    {
        objs = GameObject.FindGameObjectsWithTag(TagName);
        foreach(GameObject obj in objs)
        {
            Instantiate(PrefabObj, obj.transform.position, obj.transform.rotation);
        }
    }
  
}
这样,等Unity加载完脚本后在Window下就会出现这个类,点击后就出现了窗体,然后将预制体拖入,填入需要实例化的空物体的标签就可批量实例化相同物体。



  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值