public Vector3[] GetAnchorPoints() { if (isChange == false) { return(anchorPointsSource); } isChange = false; Vector3 center = transform.position; Vector3 size = transform.lossyScale; float angle = -transform.eulerAngles.y; anchorPointsSource[0] = new Vector3(size.x * -0.5F, 0F, size.z * -0.5F); anchorPointsSource[1] = new Vector3(size.x * 0.5F, 0F, size.z * 0.5F); anchorPointsSource[2] = new Vector3(size.x * -0.5F, 0F, size.z * 0.5F); anchorPointsSource[3] = new Vector3(size.x * 0.5F, 0F, size.z * -0.5F); size.x += extended; size.z += extended; anchorPoints[0] = new Vector3(size.x * -0.5F, 0F, size.z * -0.5F); anchorPoints[1] = new Vector3(size.x * 0.5F, 0F, size.z * 0.5F); anchorPoints[2] = new Vector3(size.x * -0.5F, 0F, size.z * 0.5F); anchorPoints[3] = new Vector3(size.x * 0.5F, 0F, size.z * -0.5F); min.x = min.z = 9999999F; max.x = max.z = -9999999F; for (int i = 0; i < anchorPoints.Length; i++) { Vector3 point = anchorPoints[i]; float anglePoint = HMath.angle(0f, 0f, point.x, point.z); float angleEnd = angle + anglePoint; float length = point.magnitude; float radian = HMath.angleToRadian(angleEnd); point.x = HMath.radianPointX(radian, length, 0f); point.z = HMath.radianPointY(radian, length, 0f); point += center; anchorPoints[i] = point; if (point.x < min.x) { min.x = point.x; } if (point.z < min.z) { min.z = point.z; } if (point.x > max.x) { max.x = point.x; } if (point.z > max.z) { max.z = point.z; } point = anchorPointsSource[i]; anglePoint = HMath.angle(0f, 0f, point.x, point.z); angleEnd = angle + anglePoint; length = point.magnitude; radian = HMath.angleToRadian(angleEnd); point.x = HMath.radianPointX(radian, length, 0f); point.z = HMath.radianPointY(radian, length, 0f); point += center; anchorPointsSource[i] = point; } anchorPoints2[0] = anchorPoints[1]; anchorPoints2[1] = anchorPoints[2]; anchorPoints2[2] = anchorPoints[0]; anchorPoints2[3] = anchorPoints[3]; return(anchorPoints); }