unity-game-engine - 如何修改脚本中的 RectTransform 属性 [Unity 4.6 beta]

标签 unity-game-engine

enter image description here

您好,我正在使用 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/

相关文章:

c# - 关于Unity中的OnRenderImage函数

macos - 如何修复: 'unitypurchasing' is already in use by another application?

c# - 如何在特定区域(例如生成点)而不是在圆圈内生成角色

c# - 手榴弹在错误的位置生成

c# - C# 中的矢量投影/拒绝?

ios - Unity Facebook 插件在登录后终止应用程序(iOS)

arrays - 使用 Json.NET 序列化 Vector2 数组

c# - 第三人称射击游戏的光线转换

android - 如何在 unity3d 中调用数据库中的项目?

ios - Facebook Unity SDK,me?fields=invitable_friends 无法在 iOS 上运行