안녕하세요!! 오늘은!! 캐릭터를 계속 따라다니는 체력바를 구현해 보도록 하겠습니다!
유니티상에서 체력바를 구현하는 방법은 여러가지 방법이 있는데요. 오늘 구현해 볼 방식은 캔버스에 체력바를 만들어서 카메라 시점이 어디로 어떻게 변하든 자연스러운 체력바를 만들어 내는 방법에 대해 포스팅 해보겠습니다!
가장 처음 할 일은 체력바를 만들어 주는거겠죠? 유니티를 켜고 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를 매초 업데이트 하기 때문에 빠른 움직임엔 그다지 자연스럽게 보여지는 방법은 아닙니다. 하지만 시점 변환이 주된 컨텐츠인 게임에선 간단하게 캔버스에 무엇인가를 그려서 표현 할 수 있기때문에 유용하죠!!
오늘 포스팅은 여기까지 하겠습니다!!
'C#' 카테고리의 다른 글
[C#][Unity] Http 통신 하기!! (0) | 2021.10.04 |
---|---|
[C#][Unity]시점을 이동하는 카메라! (0) | 2021.09.27 |
[C#][Unity] 캐릭터 점프 기능 만들기 (0) | 2021.09.14 |
[C#][Unity]인터넷에서 시간 가져오기! (0) | 2021.09.03 |
[C#][Unity] 유닛 이동 기능 만들기 (0) | 2021.08.29 |