Unity 编辑器开发实战【Editor Window】- BlendShape调试工具

举报
CoderZ1010 发表于 2022/09/25 04:21:56 2022/09/25
【摘要】 Skin Mesh Renderer组件编辑器本身包含BlendShape的调试滑动条,但是当数量较多想要重置时较为麻烦,下面介绍的工具添加了这些调试滑动条的同时,增加了一键重置的功能: 代码如下: using UnityEngine;using UnityEditor; namespace SK.Framework{ ...

Skin Mesh Renderer组件编辑器本身包含BlendShape的调试滑动条,但是当数量较多想要重置时较为麻烦,下面介绍的工具添加了这些调试滑动条的同时,增加了一键重置的功能:

代码如下:


  
  1. using UnityEngine;
  2. using UnityEditor;
  3. namespace SK.Framework
  4. {
  5. /// <summary>
  6. /// BlendShape调试工具
  7. /// </summary>
  8. public class BlendShapesPreviewer : EditorWindow
  9. {
  10. //菜单
  11. [MenuItem("SKFramework/Tools/BlendShapes Previewer")]
  12. private static void Open()
  13. {
  14. GetWindow<BlendShapesPreviewer>("BlendShapes Previewer").Show();
  15. }
  16. private Vector2 scroll = Vector2.zero;
  17. private void OnGUI()
  18. {
  19. if (Selection.activeGameObject == null)
  20. {
  21. EditorGUILayout.HelpBox("未选中任何物体", MessageType.Info);
  22. return;
  23. }
  24. SkinnedMeshRenderer smr = Selection.activeGameObject.GetComponent<SkinnedMeshRenderer>();
  25. if (smr == null)
  26. {
  27. EditorGUILayout.HelpBox("物体不包含SkinnedMeshRenderer组件", MessageType.Info);
  28. return;
  29. }
  30. Mesh mesh = smr.sharedMesh;
  31. if(mesh == null)
  32. {
  33. EditorGUILayout.HelpBox("Mesh为空", MessageType.Info);
  34. return;
  35. }
  36. int count = mesh.blendShapeCount;
  37. if (count == 0)
  38. {
  39. EditorGUILayout.HelpBox("BlendShape Count: 0", MessageType.Info);
  40. return;
  41. }
  42. scroll = EditorGUILayout.BeginScrollView(scroll);
  43. {
  44. for (int i = 0; i < count; i++)
  45. {
  46. //水平布局
  47. GUILayout.BeginHorizontal();
  48. //BlendShape名称
  49. GUILayout.Label(mesh.GetBlendShapeName(i), GUILayout.Width(150f));
  50. //滑动条
  51. float newValue = EditorGUILayout.Slider(smr.GetBlendShapeWeight(i), 0f, 100f);
  52. if (newValue != smr.GetBlendShapeWeight(i))
  53. {
  54. smr.SetBlendShapeWeight(i, newValue);
  55. }
  56. GUILayout.EndHorizontal();
  57. }
  58. }
  59. EditorGUILayout.EndScrollView();
  60. GUILayout.FlexibleSpace();
  61. //重置按钮 点击时将所有BlendShape值设为0
  62. if (GUILayout.Button("Reset"))
  63. {
  64. for (int i = 0; i < count; i++)
  65. {
  66. smr.SetBlendShapeWeight(i, 0);
  67. }
  68. }
  69. }
  70. //选择的物体变更时调用重新绘制方法
  71. private void OnSelectionChange()
  72. {
  73. Repaint();
  74. }
  75. }
  76. }

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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