Exemplo n.º 1
0
        public virtual void SelectGO(bool multiselect, bool allowUnselect)
        {
            if (!CanSelect)
            {
                return;
            }

            Ray ray = Window.Pointer;

            RaycastHit[] hits = Physics.RaycastAll(ray, float.MaxValue);
            hits = hits.Where(hit => CanSelectObject(hit.collider.gameObject)).OrderBy(hit => GetDepth(hit.transform)).ToArray();
            if (hits.Length > 0)
            {
                bool canSelect = hits.Length > 0;
                if (canSelect && (hits = FilterHits(hits)).Length > 0)
                {
                    int        nextIndex = GetNextIndex(hits);
                    GameObject hitGO     = hits[nextIndex].collider.GetComponentInParent <ExposeToEditor>().gameObject;
                    SelectGO(multiselect, allowUnselect, hitGO);
                }
                else
                {
                    if (!multiselect)
                    {
                        TryToClearSelection();
                    }
                }
            }
            else
            {
                Renderer[] selection = m_boxSelection.Pick();
                if (selection.Length > 0)
                {
                    int        nextIndex = GetNextIndex(selection);
                    GameObject hitGO     = selection[nextIndex].GetComponentInParent <ExposeToEditor>().gameObject;
                    SelectGO(multiselect, allowUnselect, hitGO);
                }
                else
                {
                    if (!multiselect)
                    {
                        TryToClearSelection();
                    }
                }
            }
        }
Exemplo n.º 2
0
        public virtual void SelectGO(bool multiselect, bool allowUnselect)
        {
            if (!CanSelect)
            {
                return;
            }

            if (m_boxSelection != null && m_boxSelection.IsThresholdPassed)
            {
                return;
            }
            IList <RaycastResult> raycastResults = RaycastUIObjects();

            if (raycastResults.Count > 0)
            {
                SelectGO(multiselect, allowUnselect, raycastResults, raycastResult => raycastResult.gameObject);
            }
            else
            {
                RaycastHit[] hits = Raycast3DObjects();
                if (hits.Length > 0)
                {
                    bool canSelect = hits.Length > 0;
                    if (canSelect)
                    {
                        hits = FilterHits(hits);
                    }
                    else
                    {
                        hits = new RaycastHit[0];
                    }

                    SelectGO(multiselect, allowUnselect, hits, hit => hit.collider.gameObject);
                }
                else
                {
                    Renderer[] renderers = m_boxSelection != null?m_boxSelection.Pick() : new Renderer[0];

                    SelectGO(multiselect, allowUnselect, renderers, renderer => renderer.gameObject);
                }
            }
        }