我正在尝试仅在滑块的右侧拉伸它。我将脚本及其“填充区域”附加到脚本。我尝试更改sizeDelta,但它同时适用于两种方式...

public Slider healthSlider;
public GameObject healthRect;

void Update () {
    healthRect.GetComponent<RectTransform> ().sizeDelta += Vector2.right * Time.deltaTime;
}


滑动条的锚点设置为左上角,“填充区域”的锚点设置为上拉伸
在此先感谢大家。

最佳答案

尝试使用RectTransformSetInsetAndSizeFromParentEdge方法。您的代码可能如下所示:

public Slider healthSlider;
public GameObject healthRect;
private float sliderSize = 100;

void Update ()
{
    healthRect.GetComponent<RectTransform> ().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, sliderSize);
    sliderSize += Time.deltaTime;
}


这将使滑块保持在左侧,同时将其“缩放”到右侧。第二个参数使您可以定位滑块左侧应相对于其父级的位置。

注意:在更新函数中调用GetComponent效率很低,您应该在RectTransform处缓存对Start的引用,然后像这样使用它:

public Slider healthSlider;
public GameObject healthRect;
private float sliderSize = 100;
private RectTransform healthRectTransform;

void Start()
{
    healthRectTransform = healthRect.GetComponent<RectTransform>();
}

void Update ()
{
    healthRectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, sliderSize);
    sliderSize += Time.deltaTime;
}


这样做意味着您只需要在GetComponent函数中调用一次Start一次,效率就高得多。

注意注意:如果仅在检查器中分配healthRect游戏对象并仅使用它来获取它的RectTransform组件,则可以删除此变量,而在检查器中仅分配healthRectTransform字段,并跳过其中的部分。 Start方法。

关于c# - 仅通过正确的C#Unity更改Slider的宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37196770/

10-13 06:49