실행 이미지

 

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

반응형

+ Recent posts