24.02.12 TIL - Unity : 적 체력 HP 시각화 + 이미지의 Billboard

JJwoo·2024년 2월 12일

인스펙터 창에서는 플레이어에게 적이 피해를 받고 있지만, 실제로는 눈에 보이지 않기 때문에 적의 체력 HP바를 만들어보기로 했다.

적의 체력바 생성

  1. Canvas 생성 -> World Space 전환
    이후 Rect Transform 초기화 및 값 조정
  1. 이 Canvas를 적 오브젝트의 자식 오브젝트로 넣어준다, 적 오브젝트를 따라다녀야 하기 때문

  2. EnemyCanvas의 Rotation y를 조절해준다. (Enemy가 바라보는 방향으로 = 180)

  3. EnemyCanvas 하위에 UI - Slider 추가 및 적절하게 크기 조절, 하위 오브젝트인 'Handle Slide Area' 삭제

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // Ui용

public class Enemy : MonoBehaviour
{
    public float hp = 100; //적 체력

    public Slider hpBar; // 적 체력바

    void Damaged(float damage)
    {
        hp -= damage; // 공격받은 데미지만큼 체력 감소

        // 감소한 체력을 체력바에 표시
        hpBar.value = hp;
    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
  • using UnityEngine.UI; : UI 관련 클래스 사용용

  • public Slider hpBar; : 적 체력바 슬라이더 변수 선언

  • hpBar.value = hp; : 적 체력바 슬라이더의 value와 적 hp를 정의하여 연결

  • 다시 유니티로 돌아와 적의 컴포넌트 스크립트의 Hp Bar 속성에 Hp Bar Slider Ui 오브젝트를 부여
  • 사진은 생략되었지만 잘 적용 되고 있다.

이미지의 BillBoard

2D라면 어디서 바라보든 hp바가 평면으로 잘 보이겠지만 현재 연습 환경은 3d이기에

플레이어의 시점에서는 어느 방향으로 보아도 항상 평면으로 보여야 한다.

여기서는 적의 Canvas 안에 부여하여 카메라가 바라보는 방향과 (오브젝트를 부여한) 적이 서로 바라보게 하는 스크립트가 필요하다.

이를 Billboard 라고 부른다고 한다.

예시) Billboard 스크립트

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

public class Billboard : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }              

    // Update is called once per frame
    void Update()
    {
        // 카메라와 자신이 서로 바라보게 설정 or 카메라가 바라보는 방향대로 내가 바라보는 방향 설정 (같은 뜻)

        transform.forward = Camera.main.transform.forward;
    }
}

  • 이 스크립트는 적 오브젝트의 자식 오브젝트인 Canvas에 부여해야 한다. (방향을 회전 시킬 것이기 때문에)

원하는 방향으로 잘 적용된 모습

이 Billboard 관련 코드는 적이 플레이어어 방향으로 이동, 회전 등에 사용 될 수도 있다.

profile
개발 모코코

0개의 댓글