您好,我正在使用 Unity 4.6 beta 中的新 UI 系统...
尝试了不同的代码,查看了文档并四处搜索,但找不到答案......
例如。我有一个图像,我想在运行时更改宽度和高度。
public GameObject image4;
image4.GetComponent<RectTransform>().rect.Set(0,0,100, 300);
这不起作用。并且 image4.GetComponent().rect.y 仅是 GET,因此无法在运行时更改。
我也尝试过:
image4.transform.localScale.y = 15;
这也不起作用。
在运行时更改大小的正确方法是什么?你可以给我一个 JS 或 C# 的例子,没关系。
最佳答案
一天的研究。 我找到了一个可以帮助我们处理新的 UI 系统的扩展。 如果您愿意,您可以改进此扩展。
public static class RectTransformExtensions
{
public static void SetDefaultScale(this RectTransform trans) {
trans.localScale = new Vector3(1, 1, 1);
}
public static void SetPivotAndAnchors(this RectTransform trans, Vector2 aVec) {
trans.pivot = aVec;
trans.anchorMin = aVec;
trans.anchorMax = aVec;
}
public static Vector2 GetSize(this RectTransform trans) {
return trans.rect.size;
}
public static float GetWidth(this RectTransform trans) {
return trans.rect.width;
}
public static float GetHeight(this RectTransform trans) {
return trans.rect.height;
}
public static void SetPositionOfPivot(this RectTransform trans, Vector2 newPos) {
trans.localPosition = new Vector3(newPos.x, newPos.y, trans.localPosition.z);
}
public static void SetLeftBottomPosition(this RectTransform trans, Vector2 newPos) {
trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z);
}
public static void SetLeftTopPosition(this RectTransform trans, Vector2 newPos) {
trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y - ((1f - trans.pivot.y) * trans.rect.height), trans.localPosition.z);
}
public static void SetRightBottomPosition(this RectTransform trans, Vector2 newPos) {
trans.localPosition = new Vector3(newPos.x - ((1f - trans.pivot.x) * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z);
}
public static void SetRightTopPosition(this RectTransform trans, Vector2 newPos) {
trans.localPosition = new Vector3(newPos.x - ((1f - trans.pivot.x) * trans.rect.width), newPos.y - ((1f - trans.pivot.y) * trans.rect.height), trans.localPosition.z);
}
public static void SetSize(this RectTransform trans, Vector2 newSize) {
Vector2 oldSize = trans.rect.size;
Vector2 deltaSize = newSize - oldSize;
trans.offsetMin = trans.offsetMin - new Vector2(deltaSize.x * trans.pivot.x, deltaSize.y * trans.pivot.y);
trans.offsetMax = trans.offsetMax + new Vector2(deltaSize.x * (1f - trans.pivot.x), deltaSize.y * (1f - trans.pivot.y));
}
public static void SetWidth(this RectTransform trans, float newSize) {
SetSize(trans, new Vector2(newSize, trans.rect.size.y));
}
public static void SetHeight(this RectTransform trans, float newSize) {
SetSize(trans, new Vector2(trans.rect.size.x, newSize));
}
}
我从这里找到的源代码: http://orbcreation.com
关于unity-game-engine - 如何修改脚本中的 RectTransform 属性 [Unity 4.6 beta],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423549/