Screen World ÁÂÇ¥ º¯È¯

Screen Space Overlay - ij¸¯ÅÍÀ§¿¡ Text Ãâ·Â

Camera.WorldToScreenPoint·Î ¿ùµå ÁÂÇ¥¸¦ ½ºÅ©¸° ÁÂÇ¥·Î º¯È¯ ÇÒ¼ö ÀÖ´Ù.

targetTrans´Â ij¸¯ÅÍ Æ®·£½ºÆûÀÌ´Ù.
offsetÀº Ÿ°Ù Æ®·£½ºÆû ¿ÀÇÁ¼ÂÀÌ´Ù.

using UnityEngine;
using UnityEngine.UI;

public class HudText : MonoBehaviour
{
    public Transform targetTrans = null;
    public Vector3 offset = Vector3.zero;
    Camera uiCamera;

    void Start()
    {
        uiCamera = Camera.main;
    }
    void Update()
    {
        transform.position = uiCamera.WorldToScreenPoint(targetTrans.position + offset);
    }
}

À̤Ԥ¨¤Â¤Ô, TextÀÇ Alignment´Â ¼öÁ÷, ¼öÆò ¸ðµÎ Áß°£À¸·Î ¼³Á¤ÇÑ´Ù.



Screen Space Camera, World Space - ij¸¯ÅÍÀ§¿¡ Text Ãâ·Â


CanvasÀÇ RenderMode°¡ Screen Space Camera, World Space À϶§ UI ÁÂÇ¥¸¦ ij¸¯ÅÍ À§¿¡ Ãâ·Â ÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

  1. Camera.WorldToScreenPoint·Î Ä«¸Þ¶óÀÇ È­¸é À§Ä¡¸¦ ±¸ÇÑ´Ù
  2. RectTransformUtility.ScreenPointToLocalPointInRectangle·Î ºÎ¸ð RectTransformÀÇ ½ºÅ©¸° À§Ä¡¸¦ ÀÚ½Ä ·ÎÄà À§Ä¡·Î º¯È¯ÇÑ´Ù.

using UnityEngine;
using UnityEngine.UI;

public class HudText : MonoBehaviour
{
    //Target Object
    public Transform targetTrans = null;
    public Vector3 offset = Vector3.zero;

    //Text UI Object
    RectTransform rectTrans;
    RectTransform parentRectTrans;
    Camera uiCamera;

    void Start()
    {
        rectTrans = GetComponent<RectTransform>();
        parentRectTrans = (RectTransform)rectTrans.parent;

        uiCamera = Camera.main;
        var canvasArr = GetComponentsInParent<Canvas>();
        for (int i = 0; i < canvasArr.Length; i++)
        {
            if (canvasArr[i].isRootCanvas && canvasArr[i].worldCamera != null)
            {
                uiCamera = canvasArr[i].worldCamera;
                break;
            }
        }
  
    }

    void Update()
    {
        if (targetTrans != null && rectTrans != null && parentRectTrans != null && uiCamera != null)
        {
            UpdateUiLocalPosFromTargetPos();
        }
    }

    void UpdateUiLocalPosFromTargetPos()
    {
        var screenPos = uiCamera.WorldToScreenPoint(targetTrans.position + offset);
        var localPos = Vector2.zero;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTrans, screenPos, uiCamera, out localPos);
        rectTrans.localPosition = localPos;
    }
}

Âü°í)
ij¸¯ÅÍ¿¡ uGUI ÅؽºÆ® Ç¥½Ã
http://cocoamix.jp/archives/5735

CanvasÀÇ RenderMode°¡ Screen Space Camera, World Space À϶§ ij¸¯ÅÍ¿¡ uGUI ÅؽºÆ® Ç¥½Ã
http://westhillapps.blog.jp/archives/44661739.html

±âŸ
http://tsubakit1.hateblo.jp/entry/2014/07/22/010739
http://tsubakit1.hateblo.jp/entry/2016/03/01/020510