[Unity] 플레이어 위에 체력 게이지 띄우기

Yerin·2023년 8월 8일
0
post-thumbnail

UI의 Slider Object를 생성하여 Prefab 형태로 만든다.

만든 Prefab을 불러오는 코드를 UIManager에 작성한다.

Canvas의 Render Mode를 World Space로 바꾸고, Event Camera를 연결시켜줘야
3D UI를 적용시킬 수 있다.

public T MakeWorldSpaceUI<T>(Transform parent = null, string name = null) where T : UI_Base
    {
        if (string.IsNullOrEmpty(name))
            name = typeof(T).Name;

        GameObject go = Managers.Resource.Instantiate($"UI/WorldSpace/{name}");
        if (parent != null)
            go.transform.SetParent(parent);

        Canvas canvas = go.GetComponent<Canvas>();
        canvas.renderMode = RenderMode.WorldSpace;
        canvas.worldCamera = Camera.main;

        return Util.GetOrAddComponent<T>(go);
    }

HPBar.cs 파일을 만들어 캐릭터가 이동할 때마다 체력게이지도 같이 이동하도록
Update 함수를 수정한다.

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

public class UI_HPBar : UI_Base
{
    enum GameObjects
    { 
        HPBar
    }
    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects));

    }

    private void Update()
    {
        Transform parent = transform.parent;
        transform.position = parent.position + Vector3.up * (parent.GetComponent<Collider>().bounds.size.y);
    }
}

그런데 체력게이지가 캐릭터가 회전할 때마다 같이 회전하는 것이 좀 아쉽다.

체력게이지가 카메라를 바라보도록 수정하자.

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

public class UI_HPBar : UI_Base
{
    enum GameObjects
    { 
        HPBar
    }
    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects));

    }

    private void Update()
    {
        Transform parent = transform.parent;
        transform.position = parent.position + Vector3.up * (parent.GetComponent<Collider>().bounds.size.y);
        //카메라와 같은 방향을 보도록 수정
        transform.rotation = Camera.main.transform.rotation;
    }
}

profile
재밌는 코딩 공부

0개의 댓글