플레이어가 공격 시, 데미지를 표시한다.
구현 방법
1. Object 생성
DamageText 오브젝트 생성하고 자식으로 Text 빈오브젝트 생성
2. TextMeshPro - Text 컴포넌트 추가
Text 빈오브젝트에 TextMeshPro - Text 컴포넌트 추가
3. Text 위치 설정
숫자를 입력하고, 최대한 부모 오브젝트와 크기, 위치를 맞춘다.
그리고 부모 오브젝트의 Color의 A 값을 0으로 투명하게 해준다.
4. 프리팹화
DamageText 오브젝트를 프리팹화 한다.
5. 스크립트 추가
DamageText 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class DamageText : MonoBehaviour
{
[SerializeField] private float _speed;
[SerializeField] private float _destroyTime;
[SerializeField] private TMP_Text _damageText;
[SerializeField] private GameObject _damageTextPrefab;
[SerializeField] private Vector3 _position;
private void Start()
{
Invoke("DestroyPrefab", _destroyTime);
}
void Update()
{
transform.position += new Vector3(0, 1, 0) * Time.deltaTime * _speed;
}
public void CreateText(Vector3 position)
{
_damageText.text = "1234";
_damageText.color = new Color(255 / 255f, 255 / 255f, 255 / 255f, 255 / 255f);
Instantiate(_damageTextPrefab, new Vector3(position.x + _position.x, position.y + _position.y, 0), Quaternion.identity);
}
private void DestroyPrefab()
{
Destroy(gameObject);
}
}
"1234" 부분에 데미지 변수를 받아오면 된다.
MouseClick 스크립트 (DamageText 함수 실행 스크립트)
[SerializeField] private GameObject _damageTextPrefab;
[SerializeField] private DamageText _damageText;
void Update()
{
if(Input.GetMouseButtonDown(0))
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
_damageText.CreateText(mousePos);
}
}
마우스 클릭하는 곳의 위치를 받아서 CreateText 함수를 실행한다.
6. 스크립트, 인스펙터 연결
DamageText 프리팹에 DamageText 스크립트를 연결한다.
그리고 인스펙터창에서 값 설정, 연결해준다.
Position 값을 설정해서 정확한 위치를 설정할 수 있다.
마찬가지로, CreateText 함수를 실행할 스크립트도 추가, 연결한다.
구현 완료
클릭하는 위치에 텍스트가 나타났다가 설정한 시간 후, 사라진다.
Player의 데미지를 받아와서 적용하면 데미지 텍스트 효과를 낼 수 있다.
'유니티' 카테고리의 다른 글
프로빌더(ProBuilder) (0) | 2023.12.21 |
---|---|
Input 메서드 정리 (1) | 2023.12.21 |
카메라 진동 효과 (0) | 2023.12.21 |
칼라 변경 (0) | 2023.12.20 |
인벤토리 만들기 (0) | 2023.12.14 |