c# - 通过代码使用 Anchor Presets 定位 UI 元素

标签 c# unity3d unity3d-2dtools

当我们在 Unity 中定位 UI 元素时,我们从 anchor 预设中固定位置,以便它的位置正确放置在 Canvas 上。

enter image description here

我们选择顶部、中间、底部、拉伸(stretch)和蓝色点。

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

我做

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

如何固定为左上角和蓝色圆点?

最佳答案

UI 对象的 RectTransform 的 anchors(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);
}

关于c# - 通过代码使用 Anchor Presets 定位 UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756823/

相关文章:

c# - 如何在装饰层下触发事件

c# - Unity C# 2D 实例化和操纵弹丸作为玩家的 child

animation - 在 Unity Animator 中缓慢旋转

animation - 通过脚本更改动画 Controller

android - 从 Android 应用程序启动 Unity 游戏并从 Unity 恢复到该应用程序是否可行?

c# - 为什么 Unity 卡在 Application.EnterPlayMode 上?

c# - 将列表的最后一个元素与之前的元素进行比较的简化语法?

c# - 如何在 WPF 中创建带标题和排序的多列 TreeView?

c# - 如何忽略第一个小数点后的第一个值(如果它是 0),否则如果大于 0,则取它?

audio - 无法为Wwise安装GVR Audio SDK