using UnityEngine;
using UnityEngine.UI;
[ExecuteAlways]
public class 進度條控制器 : MonoBehaviour
{public Image 母進度條; // 母進度條背景public Image 子進度條; // 子進度條[Range(0, 1)] public float 進度值; // 進度值public float 起點偏移量; // 從左側開始的偏移量public float 終點偏移量; // 從右側結束的偏移量private void Awake(){if (母進度條 == null){母進度條 = GetComponent<Image>();}if (子進度條 == null){子進度條 = GetComponentsInChildren<Image>()[1];}}void Update(){if (母進度條 != null && 子進度條 != null){// 獲取母進度條的 RectTransformRectTransform 母RectTransform = 母進度條.GetComponent<RectTransform>();RectTransform 子RectTransform = 子進度條.GetComponent<RectTransform>();// 計算新的子進度條寬度float 母寬度 = 母RectTransform.rect.width;float 新寬度 = 母寬度 * 進度值;新寬度 =Mathf.Max( 新寬度 - 起點偏移量 - 新寬度 / 母寬度*終點偏移量,0);// 更新子進度條的寬度子RectTransform.sizeDelta = new Vector2(新寬度, 子RectTransform.sizeDelta.y);// 動態更新子進度條的位置子RectTransform.anchoredPosition = new Vector2(起點偏移量+ 新寬度*0.5f, 子RectTransform.anchoredPosition.y);}}
}
度 = 母寬度 * 進度值;新寬度 =Mathf.Max( 新寬度 - 起點偏移量 - 新寬度 / 母寬度*終點偏移量,0);// 更新子進度條的寬度子RectTransform.sizeDelta = new Vector2(新寬度, 子RectTransform.sizeDelta.y);// 動態更新子進度條的位置子RectTransform.anchoredPosition = new Vector2(起點偏移量+ 新寬度*0.5f, 子RectTransform.anchoredPosition.y);}}
}
unity的slider用的一言難盡,各種變形