Unity 编辑器开发实战【Editor Window】- Replacer 替换器

举报
CoderZ1010 发表于 2022/09/25 06:32:36 2022/09/25
【摘要】 如图所示,假如一个模型被大量的规整的摆放在场景中,当我们修改了这个模型需要替换时,需要将新模型按照如上位置进行逐个替换比较麻烦,下面介绍的工具Replacer可以很方便的进行批量替换: 在Hierarchy层级窗口选中所有需要替换的模型,然后指定用来替换的模型,点击Replace进行替换 工具代码如下: using Uni...

如图所示,假如一个模型被大量的规整的摆放在场景中,当我们修改了这个模型需要替换时,需要将新模型按照如上位置进行逐个替换比较麻烦,下面介绍的工具Replacer可以很方便的进行批量替换:

在Hierarchy层级窗口选中所有需要替换的模型,然后指定用来替换的模型,点击Replace进行替换

工具代码如下:


  
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace SK.Framework
  4. {
  5. /// <summary>
  6. /// 替换器
  7. /// </summary>
  8. public class Replacer : EditorWindow
  9. {
  10. [MenuItem("SKFramework/Replacer")]
  11. public static void Open()
  12. {
  13. var window = GetWindow<Replacer>("Replacer");
  14. window.maxSize = new Vector2(300f, 60f);
  15. window.minSize = new Vector2(300f, 60f);
  16. window.Show();
  17. }
  18. private GameObject target;
  19. private void OnGUI()
  20. {
  21. int count = Selection.gameObjects.Length;
  22. GUILayout.Label(string.Format("Count: {0}", count));
  23. GUILayout.BeginHorizontal();
  24. GUILayout.Label("Replacer:", GUILayout.Width(100f));
  25. target = EditorGUILayout.ObjectField(target, typeof(GameObject), true) as GameObject;
  26. GUILayout.EndHorizontal();
  27. GUI.enabled = target != null;
  28. if (GUILayout.Button("Replace"))
  29. {
  30. if (EditorUtility.DisplayDialog("提醒", string.Format("将使用{0}替换所有选中的物体,是否确认?", target.name), "确认", "取消"))
  31. {
  32. for (int i = 0; i < Selection.gameObjects.Length; i++)
  33. {
  34. var go = Selection.gameObjects[i];
  35. var instance = Instantiate(target);
  36. instance.transform.position = go.transform.position;
  37. instance.transform.rotation = go.transform.rotation;
  38. instance.transform.SetParent(go.transform.parent);
  39. DestroyImmediate(go.gameObject);
  40. i--;
  41. }
  42. }
  43. }
  44. }
  45. private void OnSelectionChange()
  46. {
  47. Repaint();
  48. }
  49. }
  50. }

文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。

原文链接:coderz.blog.csdn.net/article/details/124420780

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。