GetPointOnRectEdge() private static method

private static GetPointOnRectEdge ( RectTransform rect, System.Vector2 dir ) : System.Vector3
rect RectTransform
dir System.Vector2
return System.Vector3
コード例 #1
0
        public Selectable FindSelectable(Vector3 dir)
        {
            dir = dir.normalized;
            Vector3    v      = Quaternion.Inverse(base.transform.rotation) * dir;
            Vector3    b      = base.transform.TransformPoint(Selectable.GetPointOnRectEdge(base.transform as RectTransform, v));
            float      num    = float.NegativeInfinity;
            Selectable result = null;

            for (int i = 0; i < Selectable.s_List.Count; i++)
            {
                Selectable selectable = Selectable.s_List[i];
                if (!(selectable == this) && !(selectable == null))
                {
                    if (selectable.IsInteractable() && selectable.navigation.mode != Navigation.Mode.None)
                    {
                        RectTransform rectTransform = selectable.transform as RectTransform;
                        Vector3       position      = (!(rectTransform != null)) ? Vector3.zero : rectTransform.rect.center;
                        Vector3       rhs           = selectable.transform.TransformPoint(position) - b;
                        float         num2          = Vector3.Dot(dir, rhs);
                        if (num2 > 0f)
                        {
                            float num3 = num2 / rhs.sqrMagnitude;
                            if (num3 > num)
                            {
                                num    = num3;
                                result = selectable;
                            }
                        }
                    }
                }
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        ///   <para>Finds the selectable object next to this one.</para>
        /// </summary>
        /// <param name="dir">The direction in which to search for a neighbouring Selectable object.</param>
        /// <returns>
        ///   <para>The neighbouring Selectable object. Null if none found.</para>
        /// </returns>
        public Selectable FindSelectable(Vector3 dir)
        {
            dir = dir.normalized;
            Vector3    vector3     = this.transform.TransformPoint(Selectable.GetPointOnRectEdge(this.transform as RectTransform, (Vector2)(Quaternion.Inverse(this.transform.rotation) * dir)));
            float      num1        = float.NegativeInfinity;
            Selectable selectable1 = (Selectable)null;

            for (int index = 0; index < Selectable.s_List.Count; ++index)
            {
                Selectable selectable2 = Selectable.s_List[index];
                if (!((UnityEngine.Object)selectable2 == (UnityEngine.Object) this) && !((UnityEngine.Object)selectable2 == (UnityEngine.Object)null) && selectable2.IsInteractable() && selectable2.navigation.mode != Navigation.Mode.None)
                {
                    RectTransform transform = selectable2.transform as RectTransform;
                    Vector3       position  = !((UnityEngine.Object)transform != (UnityEngine.Object)null) ? Vector3.zero : (Vector3)transform.rect.center;
                    Vector3       rhs       = selectable2.transform.TransformPoint(position) - vector3;
                    float         num2      = Vector3.Dot(dir, rhs);
                    if ((double)num2 > 0.0)
                    {
                        float num3 = num2 / rhs.sqrMagnitude;
                        if ((double)num3 > (double)num1)
                        {
                            num1        = num3;
                            selectable1 = selectable2;
                        }
                    }
                }
            }
            return(selectable1);
        }