Unity -如何应对场景拾取?如何通过在场景视图中选择它的子元素来强制选择父元素



我有以下情况,我需要一个答案:我有一个父对象和子对象。这些孩子都有独特的网格。当这些子元素在SceneView中被选中时,父元素也需要被选中。孩子们不应该让他们的检查员暴露在外面(哪怕是一瞬间)。

我该怎么做?

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

  • 首先在父对象上使用[SelectionBase]属性。这是完美的,但只有一次。子节点第一次被选中时,父节点也被选中。但是,当我再次单击子元素时,它仍然被选中。

  • 第二种溶液在Selecten.onSelectionChanged上反应。然而,这太慢了。如果子元素被选中,我可以将选择设置为父元素,但子元素仍然会暴露几帧。

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

提前感谢!:)

我已经找到了一种方法来做我想做的事情。我将[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;
    }
    }
    }
    

这允许第一个选择选择组件。从那时起,只有当你选择场景中的非子对象时,选择才会发生变化。

相关内容

  • 没有找到相关文章

最新更新