[Unity]10.좀비 서바이버 따라하기 #4 - 플레이어 체력과 UI

안녕하세요 유랑입니다.



실력향상을 위해서 오늘도 책을 따라하면서 공부하겠습니다.

궁금하신점 있으시면 댓글로 남겨주세요^^




1. 좀비 서바이버



이번 강의는 레트로님께서 만든 예제이며,

교재를 구입하시면 자세한 내용을 배우실 수 있습니다.

저는 책을 구입하였고, 스킬업을 위해서 복습겸 글을 올리겠습니다.



깃허브 사이트 => 깃허브

유튜브 사이트 => 유튜브







1-1) 플레이어 체력 UI - ㉠슬라이더



플레이어 체력을 표시해 줄 UI를 만들어 주겠습니다.

Create => UI => Sliider를 선택해서 슬라이더를 만들어 줄게요^^







1-2) 플레이어 체력 UI - ㉡캔버스의 위치와 크기 설정



슬라이더를 만들면 자동적으로 Canvas도 생성됩니다.

플레이어 캐릭터를 따라다녀야 되기에 렌더 모드는 월드 스페이스로,

단위당 레퍼런스 픽셀값도 바꿔 줄게요^^






Canvas는 플레이어 캐릭터 밑으로 넣어주시고 트랜스폼 값을 다음과 같이 변경해 주세요ㅎㅎ





캔버스의 위치는 캐릭터 밑쪽으로 배치됩니다.






1-3) 플레이어 체력 UI - ㉢슬라이더 크기 변경



Handl Slide Area는 사용하지 않기에 삭제해 주시고






Slider ~ Fill까지 선택하여 앵커 프리셋을 다음과 같이 바꿔주세요.

Alt 버튼을 누른 상태면 캔버스 크기 만큼 늘려집니다!!






1-4) 플레이어 체력 UI - ㉣슬라이더 컴포넌트 설정



슬라이더 컴포넌트도 설정해 줄게요.

Interactable이 체크된 경우 사용자 클릭 같은 상호작용이 가능합니다.

하지만 여기서는 쓰지 않기에 언체크 해주시고,

밸류 값은 캐릭터의 체력을 나타 내기에 100으로 설정해 줄게요.






Health Circle을 이용해 둥그런 체력바를 만들어 줄거에요.

백그라운드는 흰색이며 조금 투명하게





Fill은 빨간색으로 설정해 줄게요.

이미지 타입은 꼭 Filled로 설정해 주세요.

Fill 값에 따라 이미지 채움 정도가 달라집니다ㅎㅎ








1-5) 플레이어 체력 UI - ㉤PlayerHealth 스크립트



체력바가 만들어 졌으니 스크립트도 추가해 주어야겠죠?!

PlayerHealth 스크립트를 추가해 주세요^^






<PlayerHealth>


플레이어 캐릭터의 체력을 나타내는 스크립트입니다.

피격 효과음과 사망 시 애니메이션 재생, 

체력이 변경되면 체력 슬라이더에 반영하는 기능을 담고있습니다.



using UnityEngine;
using UnityEngine.UI; // UI 관련 코드

// 플레이어 캐릭터의 생명체로서의 동작을 담당
public class PlayerHealth : LivingEntity
{
    public Slider healthSlider; // 체력을 표시할 UI 슬라이더

    public AudioClip deathClip; // 사망 소리
    public AudioClip hitClip; // 피격 소리
    public AudioClip itemPickupClip; // 아이템 습득 소리

    private AudioSource playerAudioPlayer; // 플레이어 소리 재생기
    private Animator playerAnimator; // 플레이어의 애니메이터

    private PlayerMovement playerMovement; // 플레이어 움직임 컴포넌트
    private PlayerShooter playerShooter; // 플레이어 슈터 컴포넌트

    private void Awake()
    {
        // 사용할 컴포넌트를 가져오기
        playerAnimator = GetComponent();
        playerAudioPlayer = GetComponent();

        playerMovement = GetComponent();
        playerShooter = GetComponent();
    }

    protected override void OnEnable()
    {
        // LivingEntity의 OnEnable() 실행 (상태 초기화)
        base.OnEnable();

        // 체력 슬라이더 활성화
        healthSlider.gameObject.SetActive(true);
        // 체력 슬라이더의 최대값을 기본 체력값으로 변경
        healthSlider.maxValue = startingHealth;
        // 체력 슬라이더의 값을 현재 체력값으로 변경
        healthSlider.value = health;

        // 플레이어 조작을 받는 컴포넌트들 활성화
        playerMovement.enabled = true;
        playerShooter.enabled = true;
    }

    // 체력 회복
    public override void RestoreHealth(float newHealth)
    {
        // LivingEntity의 RestoreHealth() 실행 (체력 증가)
        base.RestoreHealth(newHealth);
        // 체력 갱신
        healthSlider.value = health;
    }


    // 데미지 처리
    public override void OnDamage(float damage, Vector3 hitPoint,
        Vector3 hitDirection)
    {
        if (!dead)
        {
            // 사망하지 않은 경우에만 효과음을 재생
            playerAudioPlayer.PlayOneShot(hitClip);
        }

        // LivingEntity의 OnDamage() 실행(데미지 적용)
        base.OnDamage(damage, hitPoint, hitDirection);
        // 갱신된 체력을 체력 슬라이더에 반영
        healthSlider.value = health;
    }

    // 사망 처리
    public override void Die()
    {
        // LivingEntity의 Die() 실행(사망 적용)
        base.Die();

        // 체력 슬라이더 비활성화
        healthSlider.gameObject.SetActive(false);

        // 사망음 재생
        playerAudioPlayer.PlayOneShot(deathClip);
        // 애니메이터의 Die 트리거를 발동시켜 사망 애니메이션 재생
        playerAnimator.SetTrigger("Die");

        // 플레이어 조작을 받는 컴포넌트들 비활성화
        playerMovement.enabled = false;
        playerShooter.enabled = false;
    }

    private void OnTriggerEnter(Collider other)
    {
        // 아이템과 충돌한 경우 해당 아이템을 사용하는 처리
        // 사망하지 않은 경우에만 아이템 사용가능
        if (!dead)
        {
            // 충돌한 상대방으로 부터 Item 컴포넌트를 가져오기 시도
            IItem item = other.GetComponent();

            // 충돌한 상대방으로부터 Item 컴포넌트가 가져오는데 성공했다면
            if (item != null)
            {
                // Use 메서드를 실행하여 아이템 사용
                item.Use(gameObject);
                // 아이템 습득 소리 재생
                playerAudioPlayer.PlayOneShot(itemPickupClip);
            }
        }
    }
} 



스크립트를 적용하신 후 슬라이더와 체력관련 사운드를 넣어주세요!!





오늘은 여기까지

수동으로 Fill 값을 변경하는 장면입니다.






2. 마무리



오늘 강의는 여기까지입니다.

좀비 서바이버를 따라하면서 플레이어 체력 UI를 만들어 보았습니다.

책이랑 순서나 내용이 다를 수 있습니다.

감사합니다.




수업자료: 좀비 서바이버 따라하기 #4 - 플레이어 체력과 UI




댓글

Designed by JB FACTORY