오늘은 마지막으로 전투에 디테일을 더하기 위해 데미지 텍스트 UI를 추가했다.

 

데미지 텍스트는 Prefab으로 만들었으며, DamageText 스크립트와 Animator를 컴포넌트로 가지고 있고 이미지와 텍스트를 자식으로 가지고 있다.

 

using TMPro;
using UnityEngine;

public class DamageText : MonoBehaviour
{
    #region Variables
    private TextMeshProUGUI _textMeshPro;

    public float destroyDelayTime = 1.0f;

    #endregion Variables

    #region Properties

    public int Damage
    {
        get
        {
            if (_textMeshPro != null)
            {
                return int.Parse(_textMeshPro.text);
            }

            return 0;
        }
        set
        {
            if (_textMeshPro != null)
            {
                _textMeshPro.text = value.ToString();
            }
        }
    }

    #endregion Properties

    #region Unity Methods
    private void Awake()
    {
        _textMeshPro = transform.GetChild(1).GetComponent<TextMeshProUGUI>();
    }

    private void Start()
    {
        Destroy(gameObject, destroyDelayTime);
    }
    #endregion Unity Methods
}

데미지 텍스트는 생성되고나서 1초 후에 자동으로 파괴되도록 하였다. 프로퍼티를 통해 편하게 데미지 텍스트의 수치를 변경할 수 있도록 하였다.

 

public void ShowDamageText(GameObject target, int damage)
        {
            if (target == null) return;

            GameObject damageTextGO = Instantiate(damageTextPrefab, camera.WorldToScreenPoint(target.transform.position), Quaternion.identity, damageTextParent.transform);
            DamageText damageText = damageTextGO.GetComponent<DamageText>();

            int randNum = UnityEngine.Random.Range(30, 60);
            damageTextGO.GetComponent<RectTransform>().position = new Vector2(damageTextGO.GetComponent<RectTransform>().position.x + randNum, damageTextGO.GetComponent<RectTransform>().position.y + randNum);

            damageText.Damage = damage;
        }

UIManager에서 ShowDamageText 함수를 추가하여, 적이 피격될 때 TakeDamage에서 해당 함수를 호출하도록 하였다.

ShowDamageText가 호출되면 호출한 target의 World 좌표를 Screen 좌표로 변경하여 데미지 텍스트를 생성한다. 이후 데미지 텍스트 x, y 좌표값에 랜덤한 값을 더해 랜덤한 위치에 데미지 텍스트가 생성되도록 하고, 데미지 수치를 반영하도록 하였다.

 

애니메이션은 간단하게 잠시 표시됐다가 흐려지면서 위로 사라지는 연출로 만들었다.

 

그리고 아이템 추가가 이미지만 있으면 어렵지 않게 가능하기 때문에 완성도를 높이는 차원에서 아이템 8종을 추가해주었다. 추가된 아이템은 레벨 제한이 21이기 때문에 21레벨 아이템을 드랍하는 스켈레톤을 잡으면 드랍된다.

 

 

오늘 구현된 내용은 다음과 같다.

이번에도 무기가 좀처럼 안떠서 아이템 드롭 확률을 90%로 높였다. 기존엔 50%였고, 장비가 8종이 있었으니 평균적으로 16마리는 잡아야 무기가 나왔으니 그럴 법도 한 것 같다. 어제 녹화하지 못했던 무기 교체, 데미지 수치 변경 등까지 담은 것 같다.

 

이제 1주일 전에 계획했던 기능들을 대부분 구현한 것 같다. 이번에도 만드는 과정에서 굉장히 많은 것들을 배운 것 같다. 이제 이것들을 요약해서 총정리를 할 계획이다.

+ Recent posts