Skip to content

Instantly share code, notes, and snippets.

@akof1314
Forked from westhillapps/HudControl.cs
Created March 3, 2016 12:10
Show Gist options
  • Save akof1314/430f62b1770c882268bc to your computer and use it in GitHub Desktop.
Save akof1314/430f62b1770c882268bc to your computer and use it in GitHub Desktop.
uGUIで3D空間のオブジェクト上に追従するHUD制御用コンポーネント
using UnityEngine;
/// <summary>
/// uGUIで3D空間のオブジェクト上に追従するHUD制御用コンポーネント
/// </summary>
public class HudControl : MonoBehaviour
{
public Transform targetTrans;
public Vector3 offset = Vector3.zero;
RectTransform myRectTrans;
RectTransform parentRectTrans;
Camera uiCamera;
void Awake ()
{
myRectTrans = GetComponent<RectTransform>();
parentRectTrans = (RectTransform) myRectTrans.parent;
var canvasArr = GetComponentsInParent<Canvas>();
for (int i = 0; i < canvasArr.Length; i++) {
if (canvasArr[i].isRootCanvas) {
uiCamera = canvasArr[i].worldCamera;
}
}
}
void Update ()
{
if (targetTrans != null && myRectTrans != null && parentRectTrans != null && uiCamera != null) {
UpdateUiLocalPosFromTargetPos();
}
}
void UpdateUiLocalPosFromTargetPos ()
{
var screenPos = Camera.main.WorldToScreenPoint(targetTrans.position + offset);
var localPos = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTrans, screenPos, uiCamera, out localPos);
myRectTrans.localPosition = localPos;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment