public void setVerticalNearSideInEditor(VERTICAL_PADDING_SIDE side) { mVerticalNearSide = side; setAnchorMode(mAnchorMode); }
// 停靠父节点的指定边界,并且大小不改变 protected void setToPaddingParentSide(HORIZONTAL_PADDING_SIDE horizontalSide, VERTICAL_PADDING_SIDE verticalSide, bool relativeDistance) { Vector3[] sides = null; Vector2 pos = transform.localPosition; Vector2 parentSize = Vector2.zero; GameObject parent = null; if (ReflectionUtility.isNGUI(gameObject)) { #if USE_NGUI UIRect parentRect = ReflectionUtility.findNGUIParentRect(gameObject); if (parentRect != null) { parent = parentRect.gameObject; parentSize = ReflectionUtility.getNGUIRectSize(parentRect); } else { sides = getSides(null); for (int i = 0; i < 4; ++i) { mAnchorPoint[i].setRelative(0.0f); mAnchorPoint[i].setAbsolute((i == 0 || i == 2) ? sides[i].x : sides[i].y); } parentSize.x = Mathf.Abs(sides[0].x) * 2.0f; parentSize.y = Mathf.Abs(sides[1].y) * 2.0f; } #endif } else { parent = transform.parent.gameObject; parentSize = parent.GetComponent <RectTransform>().rect.size; } if (parent != null) { sides = getSides(parent); ReflectionUtility.getParentSides(parent, mParentSides); } int count = mDistanceToBoard.Length; for (int i = 0; i < count; ++i) { mDistanceToBoard[i].setRelative(0.0f); mDistanceToBoard[i].setAbsolute(0.0f); } // 相对于左右边界 if (horizontalSide == HORIZONTAL_PADDING_SIDE.HPS_LEFT) { if (relativeDistance) { mDistanceToBoard[0].mRelative = Mathf.Abs(sides[0].x / mParentSides[0].x); mDistanceToBoard[0].setAbsolute(0.0f); } else { mDistanceToBoard[0].mRelative = 1.0f; mDistanceToBoard[0].setAbsolute(sides[0].x - mParentSides[0].x); } } else if (horizontalSide == HORIZONTAL_PADDING_SIDE.HPS_RIGHT) { if (relativeDistance) { mDistanceToBoard[2].mRelative = Mathf.Abs(sides[2].x / mParentSides[2].x); mDistanceToBoard[2].setAbsolute(0.0f); } else { mDistanceToBoard[2].mRelative = 1.0f; mDistanceToBoard[2].setAbsolute(sides[2].x - mParentSides[2].x); } } else if (horizontalSide == HORIZONTAL_PADDING_SIDE.HPS_CENTER) { if (relativeDistance) { mHorizontalPositionRelative = pos.x / (parentSize.x * 0.5f); mHorizontalPositionAbsolute = 0; } else { mHorizontalPositionRelative = 0.0f; mHorizontalPositionAbsolute = (int)(pos.x + 0.5f * Mathf.Sign(pos.x)); } } if (verticalSide == VERTICAL_PADDING_SIDE.VPS_TOP) { if (relativeDistance) { mDistanceToBoard[1].mRelative = Mathf.Abs(sides[1].y / mParentSides[1].y); mDistanceToBoard[1].setAbsolute(0.0f); } else { mDistanceToBoard[1].mRelative = 1.0f; mDistanceToBoard[1].setAbsolute(sides[1].y - mParentSides[1].y); } } else if (verticalSide == VERTICAL_PADDING_SIDE.VPS_BOTTOM) { if (relativeDistance) { mDistanceToBoard[3].mRelative = Mathf.Abs(sides[3].y / mParentSides[3].y); mDistanceToBoard[3].setAbsolute(0.0f); } else { mDistanceToBoard[3].mRelative = 1.0f; mDistanceToBoard[3].setAbsolute(sides[3].y - mParentSides[3].y); } } else if (verticalSide == VERTICAL_PADDING_SIDE.VPS_CENTER) { if (relativeDistance) { mVerticalPositionRelative = pos.y / (parentSize.y * 0.5f); mVerticalPositionAbsolute = 0; } else { mVerticalPositionRelative = 0.0f; mVerticalPositionAbsolute = (int)(pos.y + 0.5f * Mathf.Sign(pos.y)); } } for (int i = 0; i < 4; ++i) { mAnchorPoint[i].setRelative(0.0f); mAnchorPoint[i].setAbsolute(0.0f); } }