如何在脚本中修改 RectTransform 属性 [Unity 4.6 beta] [英] How to modify RectTransform properties in script [Unity 4.6 beta]

查看:48
本文介绍了如何在脚本中修改 RectTransform 属性 [Unity 4.6 beta]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我使用的是 Unity 4.6 测试版的新 UI 系统...

Hello, I'm using the new UI system from Unity 4.6 beta...

尝试了不同的代码,查看文档并四处搜索但找不到答案......

Tried different codes, looked at the docs and searched around but can't find the answer…

例如.我有一张图片,我想在运行时更改宽度和高度.

For example. I have an image and I want to change width and height during runtime.

public GameObject image4;
image4.GetComponent<RectTransform>().rect.Set(0,0,100, 300);

这不起作用.而且 image4.GetComponent().rect.y 只是 GET,所以不能在运行时改变.

which doesn't work. And image4.GetComponent().rect.y is GET only so cannot be changed at runtime.

我也试过:

image4.transform.localScale.y = 15;

这也不起作用.

在运行时更改大小的正确方法是什么?你可以给我一个 JS 或 C# 的例子,没关系.

what is the proper way to change size at runtime? You can give me an example in either JS or C#, doesn't matter.

推荐答案

一天的研究.我找到了一个可以帮助我们处理新 UI 系统的扩展.如果你愿意,你可以改进这个扩展.

One day researching. I found an extension that can help us to deal with new UI system. u can improve this extension if you want.

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

The source code I found from here: http://orbcreation.com

这篇关于如何在脚本中修改 RectTransform 属性 [Unity 4.6 beta]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆