private static GetPointOnRectEdge ( RectTransform rect, System.Vector2 dir ) : System.Vector3 | ||
rect | RectTransform | |
dir | System.Vector2 | |
Результат | System.Vector3 |
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); }
/// <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); }