仅通过右侧C#Unity更改Slider的宽度

时间:2016-05-12 20:24:43

标签: c# unity3d

我正在尝试仅在其右侧拉伸滑块。我附加了Slider及其“填充区”的脚本。我尝试改变sizeDelta,但它延伸到两个方向......

public Slider healthSlider;
public GameObject healthRect;

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

锚点设置在左上方用于滑块和顶部拉伸用于“填充区域” 先谢谢你们。

1 个答案:

答案 0 :(得分:1)

尝试并使用RectTransform&#39; SetInsetAndSizeFromParentEdge方法。您的代码可能如下所示:

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

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

这将使滑块保持在左侧,同时缩放&#39;它在右边。第二个参数可让您定位滑块左侧相对于其父级的位置。

注意:在更新函数中调用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 Gameobject并仅使用它来获取它的RectTransform组件,那么您可以删除此变量并只分配{{检查器中的1}}字段,并跳过healthRectTransform方法中的部分。