通过代码使用锚预设定位 UI 元素 [英] Positioning UI elements with Anchor Presets via code

查看:20
本文介绍了通过代码使用锚预设定位 UI 元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我们在 Unity 中定位 UI 元素时,我们会从 Anchor Presets 中固定位置,以便将其位置正确放置在画布上.

When we position UI elements in Unity, we fix the position from Anchor Presets, so that it's position is placed correctly on the canvas.

我们选择顶部、中间、底部、拉伸和蓝色点.

We select top, middle, bottom, stretch and the blue color dot.

如果我在 C# 代码中创建 UI 元素,我如何做同样的事情?

How can I do the same thing if I create UI element in the code in C#?

我做的

Texture2D textureWhite = new Texture2D(1, 1);
textureWhite.SetPixel(0, 0, Color.white);
textureWhite.Apply(); 

如何将左上角与蓝色点一起固定?

How can I fix as top left corner together with blue color dot?

推荐答案

UI Object 的 RectTransform 的 anchors(min,max) 值和枢轴点值决定了 UI 蓝色的位置点位于.

The anchors(min,max) values and the pivot point value of the UI Object's RectTransform are what determines where the UI blue color dot is located.

如果您按住 shift 键并单击每个预设,您将改变下图中圈出的属性.然后您可以复制每个变量并将它们放入代码中.

If you hold the shift key and click on each preset, you will the circled properties in the image below change. You can then copy each variable and put them into code.

这些属性由脚本通过RectTransform.anchorMinRectTransform.anchorMaxRectTransform.pivot 控制.

These properties are controlled from script via RectTransform.anchorMin, RectTransform.anchorMax and RectTransform.pivot.

不确定您问题中的 Texture2D 代码与此有什么关系,但以下是设置每个预设的功能:

Not exactly sure what the Texture2D code in your question has do with this but below are functions to set each preset:

//------------Top-------------------
void topLeft(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0, 1);
    uitransform.anchorMax = new Vector2(0, 1);
    uitransform.pivot = new Vector2(0, 1);
}

void topMiddle(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0.5f, 1);
    uitransform.anchorMax = new Vector2(0.5f, 1);
    uitransform.pivot = new Vector2(0.5f, 1);
}


void topRight(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(1, 1);
    uitransform.anchorMax = new Vector2(1, 1);
    uitransform.pivot = new Vector2(1, 1);
}

//------------Middle-------------------
void middleLeft(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0, 0.5f);
    uitransform.anchorMax = new Vector2(0, 0.5f);
    uitransform.pivot = new Vector2(0, 0.5f);
}

void middle(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0.5f, 0.5f);
    uitransform.anchorMax = new Vector2(0.5f, 0.5f);
    uitransform.pivot = new Vector2(0.5f, 0.5f);
}

void middleRight(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(1, 0.5f);
    uitransform.anchorMax = new Vector2(1, 0.5f);
    uitransform.pivot = new Vector2(1, 0.5f);
}

//------------Bottom-------------------
void bottomLeft(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0, 0);
    uitransform.anchorMax = new Vector2(0, 0);
    uitransform.pivot = new Vector2(0, 0);
}

void bottomMiddle(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(0.5f, 0);
    uitransform.anchorMax = new Vector2(0.5f, 0);
    uitransform.pivot = new Vector2(0.5f, 0);
}

void bottomRight(GameObject uiObject)
{
    RectTransform uitransform = uiObject.GetComponent<RectTransform>();

    uitransform.anchorMin = new Vector2(1, 0);
    uitransform.anchorMax = new Vector2(1, 0);
    uitransform.pivot = new Vector2(1, 0);
}

这篇关于通过代码使用锚预设定位 UI 元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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