(유니티) ProgressBar 생성

사용자 인터페이스 만들기

  • 슬라이더 만들기


슬라이더 설명

  • 채우기 위해


채우기 영역에서 채우기의 이미지 색상을 변경하면 위 이미지와 같이 해당 값에 따라 색상이 변경됩니다.

  • 채우기 영역


채우기 영역의 크기를 조정하여 색상으로 채워지는 부분을 제어할 수 있습니다.

  • (세부 사항)HP 바와 같은 물체를 따라가게 만드는 방법


슬라이더를 공간으로 드래그하는 카바를 변경하고 소스에서 개체의 위치를 ​​조정합니다.


소스 제어의 진행 표시줄 방법

캔버스에서 진행률 표시줄을 제어하는 ​​CS 파일 구성 요소의 경우


public class ProgressBarTest : MonoBehaviour
{
    protected Dictionary<Type, UnityEngine.Object()> _objects = new Dictionary<Type, UnityEngine.Object()>();
    enum GameObjects
    {
        Slider,
    }
    void Start()
    {
        Bind<GameObject>(typeof(GameObjects)); //slider오브젝트를 찾아서 내부 Dictionary _objects에 저장한다.
        GetObject((int)GameObjects.Slider);//_objects에 저장한 slider를 찾아온다.
    }

    int _num = 0; // slider에 적용할 data 값.
    int AllData = 100;// slider의 max
    void Update()
    {
        SetTimerRatio(_num / (float)AllData); // slider에 데이터 적용 함수.
        _num++;
    }

    public void SetTimerRatio(float ratio)
    {
       
        GameObject go = GetObject((int)GameObjects.Slider); //slider 오브젝트를 찾아 go 변수에 객체를 할당한다.
        Slider slider = go.GetComponent<Slider>();//해당 go 오브젝트 즉 canvas가 있는 오브젝트의 slider 컴포넌트를 찾아온다.
        slider.value = ratio;//slider value를 통해 값을 적용한다.
    }

    // slider오브젝트를 찾아서 내부 Dictionary _objects에 저장한다.
    protected void Bind<T>(Type type) where T : UnityEngine.Object
    {
        string() names = Enum.GetNames(type);
        UnityEngine.Object() objects = new UnityEngine.Object(names.Length);
        _objects.Add(typeof(T), objects);

        for (int i = 0; i < names.Length; i++)
        {
            if (typeof(T) == typeof(GameObject))
                objects(i) = Util.FindChild(gameObject, names(i), true);
            else
                objects(i) = Util.FindChild<T>(gameObject, names(i), true);

            if (objects(i) == null)
                Debug.Log($"Failed to bind({names(i)})");
        }
    }

    //_objects에 저장한 slider를 찾아온다.
    protected GameObject GetObject(int idx) { return Get<GameObject>(idx); }
    protected T Get<T>(int idx) where T : UnityEngine.Object
    {
        UnityEngine.Object() objects = null;
        if (_objects.TryGetValue(typeof(T), out objects) == false)
            return null;

        return objects(idx) as T;
    }
}

슬라이더에서 진행률 표시줄을 제어하는 ​​cs 파일 구성 요소의 경우


public class ProgressBarTest : MonoBehaviour
{
    int _num = 0; // slider에 적용할 data 값.
    int AllData = 100;// slider의 max
    void Update()
    {
        SetTimerRatio(_num / (float)AllData); // slider에 데이터 적용 함수.
        _num++;
    }

    public void SetTimerRatio(float ratio)
    {
        Slider slider = gameObject.GetComponent<Slider>();//gameOjbect는 ProgressBarTest.cs가 컴포넌트로 있는 자기 자신을 의미한다.
                                                          //자기자신의 컴포넌트 중 slider를 가져온다.
        slider.value = ratio;//slider value를 통해 값을 적용한다.
    }

}