RectTransform. SetSizeWithCurrentAnchors(Axis axis, float size) 设置宽高,Axis代表垂直和水平对应宽和高
RectTransform. GetLocalCorners(Vector3[] fourCornersArray) 以Pivot为原点坐标原点 ,获取rect四个角的本地坐标 第一个为左下角,第二个为左上角,第三个为右上角,第四个为右下角
RectTransform. GetLocalCorners(Vector3[] fourCornersArray) 以Pivot为原点坐标原点 ,获取rect四个角的世界坐标 第一个为左下角,第二个为左上角,第三个为右上角,第四个为右下角
如果要将这些世界坐标转成屏幕上的坐标使用Camera.main.WorldToScreenPoint(worldPos);
rect.xMin 以Pivot为原点坐标原点,最左侧距离Pivot的距离(和rect.left一样)
rect.xMax以Pivot为原点坐标原点,最右侧距离Pivot的距离(和rect.right一样)
rect.yMin以Pivot为原点坐标原点,最上侧距离Pivot的距离(和rect.top一样)
rect.yMax 以Pivot为原点坐标原点,最yMax侧距离Pivot的距离(和rect.bottom一样)
rect.width 矩形框的宽度
rect.height矩形框的高度
rect.max 以Pivot为原点坐标原点 rect右下角的本地坐标
rect.min 以Pivot为原点坐标原点 rect左下角的本地坐标
rect.center 以Pivot为原点坐标原点 rect中心的本地坐标
Contains(Vector3 point, bool allowInverse);判断一个点是否在矩形框里面,第二个参数表示是否允许检测宽高为负值的情况;
(1) canvas Render Mode是Screen Space-Overly
使用RectTransformUtility.RectangleContainsScreenPoint(RectTransform rect, Vector2 screenPoint),带一个参数是Rectransform,第二个是屏幕上的点
(2) canvas Render Mode是Screen Space-Camera
使用RectTransformUtility.RectangleContainsScreenPoint(RectTransform rect, Vector2 screenPoint, Camera cam) 第一个参数是Rectransform ,第二个参数是屏幕上的点,第三个参数是渲染Canvas的照相机
(1)canvas Render Mode是Screen Space-Overly
RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent(), Input.mousePosition, canvas.worldCamera, out worldPos)
(2)canvas Render Mode是Screen Space-Camera
RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent(), Input.mousePosition, null, out worldPos)
以povit为坐标原点,计算Bounds大小
RectTransformUtility.CalculateRelativeRectTransformBounds(rec,transform)
强制刷新UI,在Unity 里面有时候使用自动布局的控件添加内容以后不会刷新,这个时候可以调用下面的方法强制刷新UI
LayoutRebuilder.ForceRebuildLayoutImmediate(rect)
public class RectTransformTest : MonoBehaviour
{
public RectTransform rec;
public Canvas canvas;
void Update()
{
if (Input.GetMouseButtonDown(0)) {
//判断鼠标点下去的点是否在rec里面 Canvas 渲染模式为Screen Space-Overly的时候使用
// Debug.Log(RectTransformUtility.RectangleContainsScreenPoint(rec, Input.mousePosition));
//判断鼠标点下去的点是否在rec里面 Canvas 渲染模式为Screen Space-Camera的时候使用
//Debug.Log(RectTransformUtility.RectangleContainsScreenPoint(rec, Input.mousePosition, canvas.worldCamera));
//将屏幕上的位置转换成RectTransform下的本地坐标
//Vector2 localPos;
//RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.GetComponent(), Input.mousePosition, canvas.worldCamera, out localPos);
//Debug.Log("本地坐标" + localPos);
//Vector3 worldPos;
//将屏幕上的位置转换成RectTransform下的本地坐标
//RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent(), Input.mousePosition, canvas.worldCamera, out worldPos);
//rec.position = worldPos;
//Debug.Log("世界坐标"+worldPos);
//获取RectTransformBounds povit为原点
//Bounds bounds= RectTransformUtility.CalculateRelativeRectTransformBounds(rec,transform);
//Debug.Log(bounds.center);
//Debug.Log(bounds.min);
//Debug.Log(bounds.max);
}
if (Input.GetKeyDown(KeyCode.Space)) {
// Debug.Log("anchoredPosition==" + rec.anchoredPosition);
// Debug.Log("offsetMax==" + rec.offsetMax);
// Debug.Log("offsetMin==" + rec.offsetMin);
// Debug.Log("anchoredPosition3D==" + rec.anchoredPosition3D);
// Debug.Log("anchorMin==" + rec.anchorMin);
// Debug.Log("anchorMax==" + rec.anchorMax);
// Debug.Log("pivot==" + rec.pivot);
// Debug.Log("sizeDelta==" + rec.sizeDelta);
//Debug.Log("max" + rec.rect.max);
//Debug.Log("min" + rec.rect.min);
//Debug.Log("center" + rec.rect.center);
//Debug.Log("position" + rec.rect.position);
//Debug.Log("size" + rec.rect.size);
//Vector3[] pos = new Vector3[4];
//rec.GetWorldCorners(pos);
//Debug.Log(pos[0]);
//Debug.Log(pos[1]);
//Debug.Log(pos[2]);
//Debug.Log(pos[3]);
// Camera.main.WorldToScreenPoint(pos[0]);
//Debug.Log("屏幕上的点"+Camera.main.WorldToScreenPoint(pos[0]));
//Debug.Log("xMin" + rec.rect.xMin);
//Debug.Log("xMax" + rec.rect.xMax);
//Debug.Log("yMin" + rec.rect.yMin);
//Debug.Log("yMax" + rec.rect.yMax);
//rec.SetSizeWithCurrentAnchors(Axis.Horizontal,1000);
//rec.SetSizeWithCurrentAnchors(Axis.Vertical, 500);
//rec.SetInsetAndSizeFromParentEdge(Edge.Left,10, 500);
//rec.SetInsetAndSizeFromParentEdge(Edge.Top, 10, 500);
}
}
}