zoukankan      html  css  js  c++  java
  • 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下就会出现这个类,点击后就出现了窗体,然后将预制体拖入,填入需要实例化的空物体的标签就可批量实例化相同物体。



  • 相关阅读:
    js获取Session问题 dodo
    复制一个datatable的指定行到另外一个datatable dodo
    sqlserver数据库备份与还原语句 dodo
    net软件测试实战技术大全 dodo
    AJAX 浏览器支持 dodo
    使用 vs2005进行负载测试 dodo
    sql使用in批量删除 dodo
    各种浏览器兼容存在的方法:Xenocode Browser Sandbox dodo
    C#调用Windows API函数 dodo
    ewebeditor在ie8下报错 dodo
  • 原文地址:https://www.cnblogs.com/YDoubleC/p/6203730.html
Copyright © 2011-2022 走看看