Skip to content

develop playerHp

Yoo Hyeokjin edited this page Jun 28, 2023 · 13 revisions

playerHp

목차

완성본

1

CamController

  • 카메라가 player를 따라다니게 하는 기능

Script

using UnityEngine;

public class CamController : MonoBehaviour
{
    public GameObject player; // 플레이어 변수
    private Vector3 offset; // 카메라 위치 변수

    void Start()
    {
        offset = transform.position - player.transform.position; // 카메라 위치와 플레이어의 위치 차이를 저장
    }
    void LateUpdate()
    {
        transform.position = player.transform.position + offset; 
        // 플레이어의 위치가 변할 때 offset(카메라와의 거리)를 계속 유지하면 카메라가 고정된다.
    }
}

스크립트를 다음 그림과 같이 적용시킨다.

HealthBar

피격 등 데미지를 입으면 체력바가 줄어드는 기능 -> Hp의 Scale을 변경하여 상태를 반영하는 것으로 구현

Script

using UnityEngine;

public class HealthBar : MonoBehaviour
{
    [SerializeField] Transform mBar; // HpContainer를 저장하는 변수다.

    public void SetState(float current, float max) // Hp에 따른 Scale 변경으로 Hp를 표시한다.
    {
        float state = (float)current; // 현재 체력을 current에서 가져온다.
        state /= max; // 최대 Hp에서 현재 체력의 비율을 구한다.
        if (state < 0f) state = 0f; // 만약 음수가 됐다면 0으로 바꾼다.
        mBar.transform.localScale=new Vector3(state,1f,1f); // Scale을 체력 비율로 변경하여 상태를 반영한다.
    }
}

만드는 법

Create Empty로 Object를 만들고 이름을 HealthBar로 바꾸고 Sprite Renderer를 추가한다.

image

Create Empty로 Object를 만들고 이름을 HpContainer로 바꾼다.

image

Create Empty로 Object를 만들고 이름을 Hpbar로 바꾸고 Sprite Renderer를 추가한다.

image

다음과 같이 Hierarchy를 적용시킨다.

image

Script 적용

  • Character의 체력과 연관되어야 하기 때문에 Character.cs에 TakeDamage 안에 SetState Method가 있다.
  • Character에 피격 관련 문서
[SerializeField] HealthBar mHpBar; // Player Prefab에 들어있는 HealthBar를 저장하는 변수

public void TakeDamage(float damage, int weaponIndex)
{
    if (mbDead == true) return; 
    if (damage - mArmor <= 0) 
    {
        mCurrentHp -= Time.deltaTime * 0 * 2;
    }
    else
    {
        mCurrentHp -= Time.deltaTime * (damage - mArmor) * 2; 
    }
    if (mCurrentHp <= 0)
    {
        GameManager.instance.GameOverPanelUp(); 
        mbDead = true;                          
    }
    mHpBar.SetState(mCurrentHp, mMaxHp);        // 여기서 HealthBar의 SetState(현재체력, 최대체력) Method가 사용된다.
}

다음과 같이 Character.cs Component에도 HealthBar를 Object로 넣어야 한다.

image

그리고 다음 그림과 같이 HealthBar.cs에도 HpContainer를 넣어야한다.

image

HealthBar가 플레이어를 따라다니게 하는 기능

  • Player Prefab에 HealthBar를 넣고 위치를 고정시킨다.

다음과 같이 하면 된다.

image

위치 설정은 다음과 같다

image

Clone this wiki locally