/// <summary> /// 邻居在我的哪个方向,是否算靠的很近 /// </summary> /// <param name="moved_"></param> /// <param name="neighbour_"></param> /// <param name="dir_"></param> /// <param name="offset_"></param> /// <returns></returns> private bool IsNear(RectTransform moved_, RectTransform neighbour_, ENUM_RECT_DIR dir_, out Vector2 offset_) { offset_ = Vector3.zero; Vector2 moved_coord = this.GetLocalPositionInCanvas(moved_.gameObject); Vector2 neighbour_coord = this.GetLocalPositionInCanvas(neighbour_.gameObject); Vector2 aim_coord = this.CalcMyAimCoord(neighbour_coord, dir_); offset_ = aim_coord - moved_coord; float cur_dis = (offset_).sqrMagnitude; if (dir_ <= ENUM_RECT_DIR.E_RIGHT) { if (cur_dis > this.m_sqrt_straight_near_dis) { return(false); } } else { if (cur_dis > this.m_sqrt_oblique_near_dis) { return(false); } } offset_ = aim_coord - moved_coord; return(true); }
private Vector2 CalcMyAimCoord(Vector2 neighbour_coord_, ENUM_RECT_DIR dir_) { Vector2 aim_coord = Vector2.zero; if (ENUM_RECT_DIR.E_UP == dir_) { aim_coord = new Vector2(neighbour_coord_.x, neighbour_coord_.y - m_logic_rect_size.y); } else if (ENUM_RECT_DIR.E_DOWN == dir_) { aim_coord = new Vector2(neighbour_coord_.x, neighbour_coord_.y + m_logic_rect_size.y); } else if (ENUM_RECT_DIR.E_LEFT == dir_) { aim_coord = new Vector2(neighbour_coord_.x + m_logic_rect_size.x, neighbour_coord_.y); } else if (ENUM_RECT_DIR.E_RIGHT == dir_) { aim_coord = new Vector2(neighbour_coord_.x - m_logic_rect_size.x, neighbour_coord_.y); } if (ENUM_RECT_DIR.E_LEFT_UP == dir_) { aim_coord = new Vector2(neighbour_coord_.x + m_logic_rect_size.x, neighbour_coord_.y - m_logic_rect_size.y); } else if (ENUM_RECT_DIR.E_RIGHT_UP == dir_) { aim_coord = new Vector2(neighbour_coord_.x - m_logic_rect_size.x, neighbour_coord_.y - m_logic_rect_size.y); } else if (ENUM_RECT_DIR.E_LEFT_DOWN == dir_) { aim_coord = new Vector2(neighbour_coord_.x + m_logic_rect_size.x, neighbour_coord_.y + m_logic_rect_size.y); } else if (ENUM_RECT_DIR.E_RIGHT_DOWN == dir_) { aim_coord = new Vector2(neighbour_coord_.x - m_logic_rect_size.x, neighbour_coord_.y + m_logic_rect_size.y); } return(aim_coord); }