[타워디펜스게임] #4. HP Bar구현

치치·2024년 12월 1일
0

타워디펜스게임

목록 보기
4/18
post-thumbnail

📌 HP_Bar 객체 만들기 (잘못된 방법)

  • 프리팹으로 만들어둔 유닛 객체에 HP바 생성

  • Slider -> 캔버스 위치와 scale값 조정

  • 같은 방식으로 몬스터의 HP_Bar도 구현

    value 값을 조정하여 HP조정 -> (범위 0 ~ 1)

🧨 위의 방식이 잘못된 점

  • 첨에 생각했던 방식은 Hp바는 유닛 객체와 몬스터 객체에 각각 붙어있어야 동적으로 생성될때 Hp바도 같이 생성될 거라고 생각했다

  • 하지만 실제로 실행해보니, Hp바를 슬라이더로 만들어서 canvas가 이를 가지고 있기 때문에 객체와 몬스터가 생성될때마다 Hp바를 갖고있는 canvas도 같이 생성되어버렸다

  • 이렇게 되면 canvas가 게임씬에 너무 많이 생성되기에 렉을 유발할 수 있어서 다른 방식을 생각해보았다

💡 HP_Bar 프리팹 만들기

  • Hp바를 프리팹으로 위와 똑같이 만들어둠
  • 객체가 게임씬에 동적으로 생성될 때 Hirarchy뷰에 만들어둔 Hp_Bar_Canvas의 자식으로 들어가게 코드를 작성

💡 Hp_Bar_Canvas를 찾아서 바 추가

몬스터 스크립트

  • 몬스터가 왼쪽으로 이동하고 있는 FixedUpdate함수
  • 몬스터의 위에 Hp가 생성될 수 있는 CreateHPBar함수 추가
public clss Monster : MonoBehaviour
{
    public float speed;

    public GameObject hpBarPrefab; // HP 바 프리팹
    private GameObject hpBarInstance; // 생성된 HP 바 인스턴스



    private void Start()
    {
        CreateHPBar();
    }

    private void FixedUpdate()
    {
        transform.position -= new Vector3(speed, 0, 0);
    }




    void CreateHPBar()
    {
        // Canvas를 찾아서 HP 바를 추가
        Canvas canvas = FindObjectOfType<Canvas>();
        if (canvas != null)
        {
            // HP 바 프리팹을 Canvas 아래에 생성
            hpBarInstance = Instantiate(hpBarPrefab, canvas.transform);

            // HP 바를 몬스터 위에 배치
            hpBarInstance.GetComponent<HPBar>().SetTarget(this.transform);
        }
    }

유닛 스크립트

  • 유닛의 위에 Hp가 생성될 수 있는 CreateHPBar함수 추가
public class Unit : MonoBehaviour
{
    public GameObject hpBarPrefab; // HP 바 프리팹
    private GameObject hpBarInstance; // 생성된 HP 바 인스턴스

    private void Start()
    {
        CreateHPBar();
    }

    void CreateHPBar()
    {
        // Canvas를 찾아서 HP 바를 추가
        Canvas canvas = FindObjectOfType<Canvas>();
        if (canvas != null)
        {
            // HP 바 프리팹을 Canvas 아래에 생성
            hpBarInstance = Instantiate(hpBarPrefab, canvas.transform);

            // HP 바를 몬스터 위에 배치
            hpBarInstance.GetComponent<HPBar>().SetTarget(this.transform);
        }
    }
}

📌 제대로 된 결과

  • Hp바 프리팹이 캔버스 한개에 계속 생성된다 !
profile
뉴비 개발자

0개의 댓글