using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class UIAnimationMain : MonoBehaviour
{
[SerializeField] private Transform point; //보스의 게이지 위치 (월드상)
[SerializeField] private Transform bossGauge;
[SerializeField] private Canvas canvas;
//[SerializeField] private TMP_Text hitDamageText;
[SerializeField] private Transform hitPoint;
[SerializeField] private TMP_Text hitDamageTextPrefab;
void Start()
{
}
void Update()
{
//Canvas 의 Render Mode가 Overlay일경우
//월드 위치를 스크린 위치로 변환
Vector2 screenPosition = Camera.main.WorldToScreenPoint(point.position);
//스크린 좌표를 -> Canvas의 RectTransform로컬좌표로 변환
RectTransform canvasRectTransform = canvas.GetComponent<RectTransform>();
Vector2 canvasLocalPosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRectTransform, screenPosition, null, out canvasLocalPosition);
Debug.Log(canvasLocalPosition);
bossGauge.localPosition = canvasLocalPosition;
if (Input.GetMouseButtonDown(0))
{
StartCoroutine("HitDamageTextCreate");
}
}
IEnumerator HitDamageTextCreate()
{
float moveDuration = 1f; // 텍스트가 이동할 총 시간
float moveSpeed = 100f; // 텍스트의 이동 속도
float elapsedTime = 0; // 경과 시간
Vector2 screenPosition2 = Camera.main.WorldToScreenPoint(hitPoint.position);
//스크린 좌표를 -> Canvas의 RectTransform로컬좌표로 변환
RectTransform canvasRectTransform2 = canvas.GetComponent<RectTransform>();
Vector2 canvasLocalPosition2;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRectTransform2, screenPosition2, null, out canvasLocalPosition2);
Debug.Log(canvasLocalPosition2);
TMP_Text hitGO = Instantiate(hitDamageTextPrefab, transform);
hitGO.text = Random.Range(0, 1000) + " Hit!";
hitGO.transform.localPosition = canvasLocalPosition2;
Vector3 startPosition = hitGO.transform.position;
while (elapsedTime < moveDuration)
{
// 경과 시간에 따라 텍스트 위치 업데이트
hitGO.transform.position = startPosition + (Vector3.up * moveSpeed * elapsedTime);
elapsedTime += Time.deltaTime; // 경과 시간 업데이트
yield return null; // 다음 프레임까지 대기
}
Destroy(hitGO.gameObject);
yield return null;
}
}
UIAnimationMain.cs
반응형
'산대특 > 게임 UIUX프로그래밍' 카테고리의 다른 글
[LearnUGUI] DOTween으로 Hit Damage 텍스트 랜덤한 방향으로 출력하기 (0) | 2024.03.11 |
---|---|
[LeanUGUI] Boss의 HP 바를 Boss 위에 따라다니게 만들기 (0) | 2024.03.11 |
[LearnUGUI] 인벤토리 만들기(3) - 完 (생성/저장/삭제) (0) | 2024.02.22 |
[LearnUGUI] 인벤토리 만들기 (2) - 데이터 연동으로 동적 인벤토리 만들기 (저장 및 불러오기) (0) | 2024.02.21 |
[LearnUGUI] 인벤토리 만들기 (1) - Grid Scroll VIew 만들기 (0) | 2024.02.18 |