본문 바로가기
게임개발/게임플랫폼 응용 프로그래밍

UI카메라를 사용할 때 UI위치 변환

by pudding81 2024. 3. 11.

 

 

 

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class UIAnamationMain : MonoBehaviour
{

    [SerializeField] private Transform point;   //보스의 게이지 위치 (월드상)   
    [SerializeField] private Transform bossGauge;
    [SerializeField] private Canvas canvas;
    [SerializeField] private Camera uiCamera;
  
  
    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;


        //Canvas의 Render Mode가 Camera일경우 ---UICamera로 셋팅 
        //월드 위치를 Canvas의 RectTransform의 월드 위치로 변환 
        bossGauge.position = GetWorldPositionToRectTransformWorldPosition(point.position);
      
    }


   

    private Vector3 GetWorldPositionToRectTransformWorldPosition(Vector3 worldPosition)
    {
        Vector2 screenPosition = RectTransformUtility.WorldToScreenPoint(uiCamera, worldPosition);
        Vector3 rtnWorldPosition;
        RectTransform canvasRectTransform = canvas.GetComponent<RectTransform>();
        RectTransformUtility.ScreenPointToWorldPointInRectangle(canvasRectTransform, screenPosition, uiCamera, out rtnWorldPosition);
        return rtnWorldPosition;
    }


}