2024년 5월 20일 월요일 개발일지 / 팀 프로젝트 진행 상황과 Slider로 체력바(Hp UI) 만들기

2024. 5. 20. 23:22나의 개발자 기록/본 캠프 개발 일지

2024년 5월 20일 월요일


팀 프로젝트 진행 상황

 

 

오늘은 아침에 1시간 동안 분반별 과제를 진행했고, 그다음에는 주말에 잠깐 팀원분들과 회의했던 프로젝트의 방향성구현을 해야 하는 순서에 대해서 다시 한번 이야기를 나누었습니다. 그리고 어떤 방식으로 게임을 추가로 구성할지에 대해서 이야기한 뒤에 각자 하고 싶은 역할을 맡아서 진행했습니다.

 

 

제가 맡은 역할은 체력 시스템을 구현하는 것이었습니다. 그래서 일단 저는  플레이어에게 적용할 체력 시스템 스크립트를 만들고, 플레이어가 버섯에 닿게되면 체력이 다는 로직을 구현했습니다. 체력 시스템과 체력바를 만드는 방법은 밑에 자세하게 쓸 생각입니다.

 

 

점심때까지 체력 시스템을 완성해서 dev에 Pull RequestMerge했고, 15시에 있었던 유니티를 활용한 다양한 분야에 대한 강의를 들었습니다. 강의에서는 유니티가 게임뿐만 아니라 VR, AR, 광고, 애니메이션 등등 다양한 장르에서 사용되고 있기 때문에 자신이 목표로 하는 회사가 있다면 그에 맞게 준비하면 된다고 하셨습니다.

 

 

그렇게 강의가 끝난 후, 다시 팀 회의를 시작해서 각자 역할을 맡았고, 저는 스킬 시스템을 구현하게 되었습니다. 처음에는 어떻게 하면 좋을지 막막했지만, 챗 GPT의 도움으로 어떤 방식으로 만들어야 하는지에 대해 길이 보였습니다. 그래서 스킬도 HP 바와 마찬가지로 해당 스크립트를 만들고, 기존의 Input System에 스킬에 대한 추가 Action을 넣은 후, 해당 스킬 로직을 추가해서 임시로 완성했습니다. 아직 완벽하게 다 구현된 건 아니라서 내일 다시 한번 손을 봐야 할 것 같네요.


Slider로 Hp 바 만들기

 

 

1. Slider바 생성하기


 

2. Handle Slide Area 삭제하기


 

3. Fill Color 빨간색으로 바꾸기


 

4. Fill Area의 Rect Transform의 Left와 Right를 0으로 만들어주기

(기본값이 Left는 5, Right는 15로 되어있음, 0으로 만들어 주는 이유는 체력바가 빨간색으로 조금 남기 때문임)


 

5. Fill의 Width 값도 0으로 만들어주자


 

6. Min Value 값은 0으로 Max Value 값은 최대 체력으로 설정하고 싶은 값을 입력하자


 

 

7. 마지막으로 위치 값과 크기를 마음대로 설정하면 유니티에서는 일단 끝!

스크립트로 넘어가보자~


 public int maxHp = 100;
 public float currentHp;
 
  private void Start()
 {
     currentHp = maxHp;
 }

 

8. 스크립트를 하나 만들어서 최대 체력과 현재 체력을 설정하자.


public Text hpText;

private void Update()
{
    hpText.text = currentHp.ToString() + " / " + maxHp.ToString();
}

 

9. 위에서 텍스트 추가는 안 했지만, 텍스트에도 체력을 반영하고 싶다면 이렇게!

using UnityEngine.UI; 쓰는 거 잊지 말자


public Slider hpSlider;

void UpdateHpUI()
{
    if (hpSlider != null) hpSlider.value = currentHp;
}

 

10. 슬라이더를 추가해서 슬라이더의 value 값에 현재 체력을 할당해 주는 함수를 만들자


public bool isDead = false;

public void Die()
{
    isDead = true;
}

public void TakeDamage(float damage)
{
    currentHp -= damage

    if (currentHp < 0) currentHp = 0;
    if (currentHp == 0) Die();

    UpdateHpUI();
}

 

11. 죽는 로직은 굳이 여기서 할 필요 없지만, 쓴다고 한다면 이렇게!

받는 대미지 함수는 매개변수로 damage를 받아와서 적용!


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

public class PlayerHealthSystem : MonoBehaviour
{
    public int maxHp = 100;
    public float currentHp;

    public Slider hpSlider;
    public Text hpText;

    public bool isDead = false;

    private void Start()
    {
        currentHp = maxHp;
    }

    private void Update()
    {
        hpText.text = currentHp.ToString() + " / " + maxHp.ToString();
    }

    public void Die()
    {
        isDead = true;
    }

    public void TakeDamage(float damage)
    {
        currentHp -= damage * damageReduction;

        if (currentHp < 0) currentHp = 0;
        if (currentHp == 0) Die();

        UpdateHpUI();
    }

    private void UpdateHpUI()
    {
        if (hpSlider != null) hpSlider.value = currentHp;
    }
}

 

12. 스크립트를 다 작성했다면 이렇게!

이제 이 스크립트를 플레이어에다가 넣어주자~


 

13. 마지막으로 Slider와 Text 오브젝트를 넣어주자~


 

14. 완성!