본문 바로가기
C#

[C#][Unity]체력바 만들기!

by teamnova 2021. 9. 17.

안녕하세요!! 오늘은!! 캐릭터를 계속 따라다니는 체력바를 구현해 보도록 하겠습니다!

유니티상에서 체력바를 구현하는 방법은 여러가지 방법이 있는데요. 오늘 구현해 볼 방식은 캔버스에 체력바를 만들어서 카메라 시점이 어디로 어떻게 변하든 자연스러운 체력바를 만들어 내는 방법에 대해 포스팅 해보겠습니다!

 

가장 처음 할 일은 체력바를 만들어 주는거겠죠? 유니티를 켜고 Hierarchy창에서 Slider를 만들어 주도록 하겠습니다~!

 

 

Slider를 만들면 Canvas와 EventSystem이 같이 생성되는 것을 확인하실수 있고 Canvas 하위 객체로 Slider가 만들어 진걸 보실 수 있습니다! 이제 이걸 하셨다면 체력바만들기 절반은 끝난 것 입니다.!!

 

Slider를 해부해 보면 이런객체들로 구성되어 있는데요. 이번 포스팅에서 Handle Slide Area는 사용하지 않을거니 과감히 삭제 해 주세요!

삭제하면 얘만 남습니다..

Slider의 Inspector에서 Value값을 조정 할 수 있는데 Value값 조정을 통해서 게이지바를 조정 할 수 있습니다.

 

모양을 조정하고 Fill의 색상을 변경해서 저는 이렇게 만들어 주었습니다!

이제 스크립트를 만들어 주겠습니다! 코드는 이렇습니다!

public class PlayreHP_Bar : MonoBehaviour
{
    public Transform player;
    public Slider hpbar;
    public float maxHp;
    public float currenthp;

    void Update()
    {
        transform.position = player.position+new Vector3(0,0,0);
        hpbar.value = currenthp / maxHp;
    }
}

간단 하죠? 이 스크립트를 플레이어 대상 스크립트에 넣어주고 수치를 입력해 주겠습니다.

저는 수치는 이렇게 입력해 주었고요 Player와 Hpbar 변수에 Player 오브젝트와 Slider를 지정해 주었습니다.

이제 캔버스에 스크립트를 추가해 볼건데요.

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

public class Hpbar_Control : MonoBehaviour
{
    public List<Transform> obj  ;
    public List<GameObject> hp_bar;

    Camera camera;
    // Start is called before the first frame update
    void Start()
    {
        camera = Camera.main;
        for (int i = 0; i < obj.Count; i++) {
            hp_bar[i].transform.position = obj[i].position;
        }
    }

    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < obj.Count; i++)
        {
            hp_bar[i].transform.position = camera.WorldToScreenPoint(obj[i].position + new Vector3(0,1f,0));
        }
    }
}

캔버스에 들어갈 코드는 이렇게 만들었습니다!

Inpector 창에서도 플레이어 오브젝트와 Slider를 지정해 주었고요.

이제 잘 되는지 테스트를 해볼까요???

 

네 움직임을 잘 따라다니는걸 볼 수 있습니다! 이 방식은 캔버스에서 HP를 매초 업데이트 하기 때문에 빠른 움직임엔 그다지 자연스럽게 보여지는 방법은 아닙니다. 하지만 시점 변환이 주된 컨텐츠인 게임에선 간단하게 캔버스에 무엇인가를 그려서 표현 할 수 있기때문에 유용하죠!!

 

오늘 포스팅은 여기까지 하겠습니다!!