[Unity Project] Progress bar(진행바) 만들어서 채우기

2023. 8. 18. 19:45· 동식이 취업시키기 작전/1차 프로젝트 : Overcooked2
목차
  1. 🕹️ 조건
  2. 🕹️ UI 생성하기
  3. 🕹️ 스크립트 작성하기
  4. 🕹️ 결과물
728x90

플레이어가 재료를 썰면 진행바가 만들어 지면서 바가 착착착 쌓이는 UI를 만들어보도록 하겠습니다.

 

이번엔 대장님 도움 없이 만들었습니다. 적극 칭찬!!


🕹️ 조건

1. 플레이어가 재료를 썰면 진행바가 찬다.

    1.1. 재료는 총 5회 썬다.

    1.2. 진행바는 초록색이다.

2. 진행바가 가득 차면 사라진다.

    2.1. 플레이어가 인지 가능한 시간동안 UI 노출이 되다가 사라진다.

 

🕹️ UI 생성하기

1. Progress bar UI 만들기

UI > Slider로 만들어주고, Handle Side Area를 Awake(false)로 해준다.

 

왜냐하면 사용 안할거니깐!

 

 

🕹️ 스크립트 작성하기

1. Progress bar.cs 작성하기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// progress bar
// 재료 썰기가 시작되면
// 재료 위에 위치한다.

// 재료를 다지는 횟수만큼
// 재료 바를 올려준다.

// 재료가 다 썰리면
// 재료바가 사라진다.
public class ProgressBar : MonoBehaviour
{
    Ingredient ing;

    public GameObject progressBarGroup;
    public GameObject progressBar;
    Slider slider;

    private void Awake()
    {
        progressBar.SetActive(false);
        progressBarGroup.SetActive(false);
    }

    // Start is called before the first frame update
    void Start()
    {
        ing = GetComponent<Ingredient>();

        slider = progressBar.GetComponent<Slider>();
    }

    // Update is called once per frame
    void Update()
    {
        // 재료가 다 썰리면 재료바 작동 메서드 실행
        if (ing.SLICE_PROCESS > 0)
        {
            FillProgressBar();
        }

        if (Input.GetKeyDown(KeyCode.X))
        {
            ing.SLICE_PROCESS += 20;
        }
 
    }

    // 재료 바 생성 및 작동
    void FillProgressBar()
    {
        progressBar.SetActive(true);
        progressBarGroup.SetActive(true);
        slider.value = ing.SLICE_PROCESS / 100;


        if (slider.value >= 1)
        {
            progressBar.SetActive(false);
            progressBarGroup.SetActive(false);
            slider.value = 0;
        }
    }
    
}

테스트를 위한 코드를 제외하고 기능을 구현한 코드만 잘라서 보면

    Ingredient ing;

    public GameObject progressBarGroup;
    public GameObject progressBar;
    Slider slider;

같은 오브젝트에 삽입된 컴포넌트는 asign없이 사용 가능하다. 나는 Ingredient.cs를 사용 할 거라서 GameObejct나asign없이 바로 Ingredient ing;를 선언했다.

 

나머지는 UI 작업에 필요한 게임 오브젝트와 해당 게임 오브젝트에서 가져 올 컴포넌트를 담을 Slider형의 slider 변수를 선언했다.

    private void Awake()
    {
        progressBar.SetActive(false);
        progressBarGroup.SetActive(false);
    }

Awake로 유니티 시작과 동시에 bar, bar group을 꺼준다. (Awake는 유니티 생명주기 참고)

   void Start()
    {
        ing = GetComponent<Ingredient>();

        slider = progressBar.GetComponent<Slider>();
    }

그리고 Start 메서드에서 ing, slider에 각각 필요한 컴포넌트를 넣어준다.

 

ing는 Ingredient를

slider에는 progressBar UI에 존재하는 Slider라는 컴포넌트를 가져왔다.

   void Update()
    {
        // 재료가 다 썰리면 재료바 작동 메서드 실행
        if (ing.SLICE_PROCESS > 0)
        {
            FillProgressBar();
        }
    }

ing 변수를 만들어준 이유는 ing에 SLICE_PROGESS라는 프로퍼티를 사용하기 위해서다.

 

나는 '재료가 썰리는 만큼 progess bar 채우기'라는 조건이 있었으므로 해당 프로퍼티를 사용하여 '재료가 썰어지는 과정이 0 이상이면 == 재료가 썰리기 시작하면) FillProgressBar 메서드를 실행시켰다.

   void FillProgressBar()
    {
        progressBar.SetActive(true);
        progressBarGroup.SetActive(true);
        slider.value = ing.SLICE_PROCESS / 100;


        if (slider.value >= 1)
        {
            progressBar.SetActive(false);
            progressBarGroup.SetActive(false);
            slider.value = 0;
        }
    }

재료가 썰어지는 동시에 progress bar, bar group을 활성화하고 slider value값을 slice progess / 100으로 해줬다. 

 

그리고 만약 slider.value가 1이 된다면? 즉, 슬라이더가 꽉 찬다면? bar, bar group을 비활성화하고 slider.value를 초기화했다.

 

 

2. Assign 진행시켜

해당 UI를 재료 프리팹에 부착해서 사용해야 하지만, 아직 병합 전이므로 다른 사람의 작업물을 건들면 안 된다.

 

그래서 Empty GameObject를 생성하여 내가 만든 스크립트와 해당 스크립트에 필요한 스크립트(대장님이 작업하심)를 GameObject에 Assign하여 스크립트끼리 서로 GetComponent를 사용할 수 있게 만들었다.

 

🕹️ 결과물

해당 바가 다 채워진 후 바로 사라지는 모습을 수정하면 progress bar의 기능은 다 구현한거다!!

저작자표시 비영리 변경금지 (새창열림)

'동식이 취업시키기 작전 > 1차 프로젝트 : Overcooked2' 카테고리의 다른 글

[Unity Project] Github Desktop Branch 최신 상태로 만들기, 최신 상태의 브랜치(branch) 가져오기  (0) 2023.08.19
[Unity Project] UI를 움직이기(feat. coroutine 코루틴)  (0) 2023.08.16
[Unity Project] 협업하면서 씬 교체하기  (0) 2023.08.11
  1. 🕹️ 조건
  2. 🕹️ UI 생성하기
  3. 🕹️ 스크립트 작성하기
  4. 🕹️ 결과물
'동식이 취업시키기 작전/1차 프로젝트 : Overcooked2' 카테고리의 다른 글
  • [Unity Project] Github Desktop Branch 최신 상태로 만들기, 최신 상태의 브랜치(branch) 가져오기
  • [Unity Project] UI를 움직이기(feat. coroutine 코루틴)
  • [Unity Project] 협업하면서 씬 교체하기
이동식이
이동식이
개발자가 되고싶은 동식이... 티스토리를 시작하게 되었다.
이동식이
동식이의 공부상자
이동식이
전체
오늘
어제
  • 분류 전체보기 (116)
    • 동식이 취업시키기 작전 (74)
      • 코딩테스트 (43)
      • 알고리즘 (5)
      • Unity (7)
      • CS (1)
      • 1차 프로젝트 : Overcooked2 (4)
      • FPS - Penguin party(feat. u.. (4)
      • UNITY로 FPS GAME 개발(FEAT. 1인.. (3)
      • 기업프로젝트 : Hacsamo (3)
    • 알고리즘 (15)
      • 백준 (4)
      • 프로그래머스 (10)
    • 일기 (3)
      • 회고 (0)
      • 리뷰 (0)
    • 자격증 (7)
      • 실기 (3)
      • 1. 요구사항 확인 (4)
    • Project (11)
      • Team Project (4)
      • Personal Project (0)
      • 베어머더러 (0)
      • 빵빵빵 타이쿤 (7)
    • 기술 블로그 염탐 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • Photon
  • [play games plugin 0.10.14] 06-11-25 23:27:52 +09:00 error: server auth code and id token require web clientid to configured. googleplaygames.ourutils.playgameshelperobject:update() [play games plugin 0.10.14] 06-11-25 23:27:52 +09:00 error: exception l
  • system.action`1[t] callback) [0x00000] in <00000000000000000000000000000000>:0 at googleplaygames.ourutils.playgameshelperobject.update () [0x00000] in <00000000000000000000000000000000>:0 googleplaygames.ourutils.playgameshelperobject:update()
  • 무한배경
  • 아자아자 파이팅이닷!
  • 백준
  • 유니티
  • 빵빵빵타이쿤
  • 스택
  • c#
  • 개인정보수집유효기간
  • 코딩테스트
  • Python
  • Unity
  • 배경스크롤링
  • 애인에겐 머리를 조아려 감사함
  • 슬픈 런타임에러 증후군
  • 파이썬
  • 자료구조
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
이동식이
[Unity Project] Progress bar(진행바) 만들어서 채우기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.