在 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 是正确的比例。 但我不想手动设置,我希望无论我更改滑块的大小,标记都会自动适合。
一般来说,您应该尽量避免使用 UI 元素的比例,而是相应地调整宽度和高度
您目前这样做
* 0.01
因为您的图像预制件具有宽度和高度 100
;)
因此您的
100 * 0.2
会回到所需的 20
。
RectTransform.sizeDelta
设置为预期的
mark.GetComponent<RectTransform>().sizeDelta = Vector2.one * size;
在您的情况下,这是有效的,因为图像使用非拉伸锚点。更一般的是使用
SetSizeWithCurrentAnchors