Slider HP Bar 를 추가 & Enemy HP 감소 다루기 & Billboard
🔻 HP바를 표시할 오브젝트 아래에 Canvas를 추가하고, 크기를 조정한다.
📣 WorldSpace로 변경
🔻 Canvas 아래에 Slider UI를 추가한다
Handle Slide Area 손잡이는 필요에 따라 비활성화하여 없앤다
🔻 EnemyHP 스크립트를 새로 생성하여 컴포넌트로 추가한다
📌 체력은 property 프로퍼티로 생성한다
//태어날 때 체력을 최대체력으로 하고싶다
//UI도 같이 표현하고 싶다
using UnityEngine.UI;
public class EnemyHP : MonoBehaviour
{
public int maxHP = 2;
int hp;
public Slider sliderHP;
public int HP
{
get { return hp; }
set {
hp = value;
sliderHP.value = hp;
}
}
void Start()
{
sliderHP.maxValue = maxHP;
HP = maxHP;
}
}
🔻 Bullet을 쏘는 스크립트 (Gun.cs)
📌 Gun.cs
Raycast를 통해 감지한 물체를 enemy 스크립트에 알린다
TakeDamage()함수를 만든다
//Enemy에게 너 총 맞았어
void Update()
{
...
ps.Stop();
ps.Play();
//만약 hitInfo(맞은 물체 감지)의 물체가 Enemy라면
if(hitInfo.transform.name.Contains("Enemy"))
{
//Enemy의 총 맞은 것을 알림
Enemy enemy = hitInfo.trnasform.GetComponent<Enemy>();
enemy.TakeDamage(1);
}
}
📌 Enemy.cs
Enemy 스크립트에서 EnemyHP를 가져오고, TakeDamage 함수로 체력을 감소시킨다
EnemyHP를 가져오는 이유는 damage만큼 감소하는 동시에, Slider 값도 감소시키기 위함이다 (property)
EnemyHP enemyhp; //EnemyHP 스크립트를 가지고 옴
void Start()
{
enemyHP = GetComponent<EnemyHP>();
}
void TakeDamage(int damage)
{
//damage만큼 체력을 감소시키고 싶다
enemyHP.HP -= damage;
//만약 체력이 0이하라면 나를 파괴하고 싶다
if (enemyHP.HP <= 0)
{
Destroy(gameObject);
}
}
👩💻 Billboard | 빌보드
캔버스 Slider UI가 카메라 시점에서 정면으로 보이지 않을 때
Billboard.cs를 생성하여 캔버스에 추가한다.
캔버스의 회전이 카메라의 회전과 같게 만든다
public class Billboard : MonoBehaviour
{
Transform camTransform;
void Start()
{
camTransform = Camera.main.transform;
}
void Update()
{
transform.rotation = camTransform.rotation;
}
}
'유니티' 카테고리의 다른 글
미니맵 만들기 / Raw Image / Render Texture (0) | 2022.06.06 |
---|---|
player 순찰 & 추적 / waypoint / NavMeshAgent (0) | 2022.06.06 |
애니메이션의 특정 부분에 다른 이벤트가 함께 나타나는 기능 / Animation Event / Hit (0) | 2022.06.05 |
공격을 받았을 때 Material 바꾸기 (Flash effect) (0) | 2022.05.24 |
싱글톤 Singleton (C#) (0) | 2022.05.15 |