0

我有以下情况需要回答:我有一个带有孩子的父对象。这些孩子都有独特的网格。每当在 SceneView 中选择这些子项时,都需要选择父项。孩子们不应该让他们的检查员暴露(甚至不到一秒钟)。

我该怎么做呢?

我提出了两种可能的解决方案,但不是我想要的解决方案。

  • 首先是[SelectionBase]在父对象上使用属性。这工作完美,但只有一次。第一次选择孩子时,选择父母。但是,当我再次单击孩子时,它仍然被选中。

  • 第二种解决方案是对Selecten.onSelectionChanged. 然而这太慢了。如果选择了一个孩子,我可以将选择设置为父级,但孩子仍然会暴露几帧。

是否有一个即时解决方案可以保证我的功能SelectionBase,但每次都不是我第一次点击它?

提前致谢!:)

4

1 回答 1

0

我找到了一种方法来做我想做的事。我将 [SelectionBase] 属性与编辑器 OnSceneGui 中的一段代码结合起来。

  • 首先将 [SelectionBase] 属性添加到您的类

  • 其次将此代码添加到其编辑器类

      private void OnSceneGUI()
      {
          HandleUtility.AddDefaultControl(0);
    
          //Get the transform of the component with the selection base attribute
          Transform selectionBaseTransform = component.transform;
    
          //Detect mouse events
          if (Event.current.type == EventType.MouseDown)
          {
              //get picked object at mouse position
              GameObject pickedObject = HandleUtility.PickGameObject(Event.current.mousePosition, true);
    
              //If selected null or a non child of the component gameobject
              if (pickedObject == null || !pickedObject.transform.IsChildOf(selectionBaseTransform))
              {
                  //Set selection to the picked object
                  Selection.activeObject = pickedObject;
              }
          }
      }
    

这允许第一个选择选择组件。从那时起,只有当您选择场景中的非子对象时,选择才会真正改变。

于 2021-02-02T11:06:44.460 回答