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

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

问题描述

您好,我正在使用Unity 4.6 beta版的新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

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

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