通过代码使用锚点预设定位 UI 元素

10
当我们在Unity中定位UI元素时,我们固定锚点预设的位置,以便将其正确地放置在画布上。

enter image description here

我们选择顶部、中间、底部、拉伸和蓝色点。
如果我在C#代码中创建UI元素,我该怎么做?
我制作
Texture2D textureWhite = new Texture2D(1, 1);
textureWhite.SetPixel(0, 0, Color.white);
textureWhite.Apply(); 

我该如何将左上角固定并与蓝色圆点一起修复?
2个回答

23

UI对象的RectTransform锚点(min、max)值和中心轴点值决定了UI蓝色点的位置。

如果按住Shift键并单击每个预设项,您可以看到下图中圈出的属性会发生变化。然后,您可以将每个变量复制并放入代码中。

enter image description here

这些属性可以通过脚本控制,例如 RectTransform.anchorMinRectTransform.anchorMaxRectTransform.pivot

不确定您提问中的Texture2D代码与此有何关系,但以下是设置每个预设项的函数:

//------------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);
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接