根据雨凇大神的文档 改成适合自己的 工具 用static是因为项目里用lua调用这个脚本函数实现 获取contentsizefitter组件的值
LayoutRebuilder.ForceRebuildLayoutImmediate(__protected.layout.transform);核心代码这一句
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using FitMode = UnityEngine.UI.ContentSizeFitter.FitMode;
using UnityEngine.EventSystems;
using System;
namespace mirror
{
public class PreferredSize
{
public static void RefreshTransform(GameObject obj)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(obj.GetComponent<RectTransform>());
}
//立即获取ContentSizeFitter的区域
public static Vector2 GetPreferredSize(GameObject obj)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(obj.GetComponent<RectTransform>());
return new Vector2(HandleSelfFittingAlongAxis(0, obj), HandleSelfFittingAlongAxis(1, obj));
}
//获取宽和高
public static float HandleSelfFittingAlongAxis(int axis, GameObject obj)
{
FitMode fitting = (axis == 0 ? obj.GetComponent<ContentSizeFitter>().horizontalFit : obj.GetComponent<ContentSizeFitter>().verticalFit);
if (fitting == FitMode.MinSize)
{
return LayoutUtility.GetMinSize(obj.GetComponent<RectTransform>(), axis);
}
else
{
return LayoutUtility.GetPreferredSize(obj.GetComponent<RectTransform>(), axis);
}
}
}
}