如何计算预制比例尺寸以自动适应 ui 滑块高度?

问题描述 投票:0回答:1

在 CreateMarks 方法中,我在 ui 滑块上创建标记,然后设置标记大小以适合滑块高度。 但改为手动设置尺寸,我想自动设置。

void CreateMarks()
{
    RectTransform sliderRect = slider.GetComponent<RectTransform>();

    // Calculate the width of each step on the slider
    float stepWidth = sliderRect.rect.width / (objectsToMove.Count + 1); // +1 to avoid overlapping at edges

    for (int i = 1; i <= objectsToMove.Count; i++)
    {
        // Instantiate a mark
        // Find the Handle Slide Area within the slider
        Transform handleSlideArea = slider.transform.Find("Handle Slide Area");

        // Instantiate the prefab as a child of the Handle Slide Area
        GameObject mark = Instantiate(markPrefab, handleSlideArea);

        SetMarKSize(mark, sliderRect.rect.height);

        // Set the sibling index of the instantiated prefab to be before the Handle
        // Assuming "Handle" is the last child, we place mark before it
        mark.transform.SetSiblingIndex(handleSlideArea.childCount - 2);

        RectTransform markRect = mark.GetComponent<RectTransform>();

        // Position the mark at the corresponding step position
        markRect.anchoredPosition = new Vector2(stepWidth * i - (sliderRect.rect.width / 2), 0);
        marks.Add(mark);
    }
}

private void SetMarKSize(GameObject mark, float size)
{
    mark.transform.localScale = new Vector3(size * 0.01f, size * 0.01f, 1);
}

此屏幕截图显示了使用脚本更改标记后的标记。

我知道在这个例子中滑块高度是 20 所以 * 0.01 它使每个标记对象在 x 和 y 上缩放 0.2。

我知道 0.1 是正确的比例。 但我不想手动设置,我希望无论我更改滑块的大小,标记都会自动适合。

the slider settings

mark settings

c# unity-game-engine
1个回答
0
投票

一般来说,您应该尽量避免使用 UI 元素的比例,而是相应地调整宽度和高度

您目前这样做

* 0.01
因为您的图像预制件具有宽度和高度
100
;)

因此您的

100 * 0.2
会回到所需的
20

相反,您可以将

RectTransform.sizeDelta
设置为预期的

mark.GetComponent<RectTransform>().sizeDelta = Vector2.one * size;

在您的情况下,这是有效的,因为图像使用非拉伸锚点。更一般的是使用

SetSizeWithCurrentAnchors

© www.soinside.com 2019 - 2024. All rights reserved.