功能:是因为公司的模型组需要一个插件,在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下就会出现这个类,点击后就出现了窗体,然后将预制体拖入,填入需要实例化的空物体的标签就可批量实例化相同物体。