유니티

Slider HP Bar / property / Billboard

nock_ji 2022. 6. 6. 19:26

 

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;
    }
}