其实原理就是把Sprite的世界坐标转换为屏幕坐标,然后再把屏幕坐标转换为UI坐标,最后赋值给UI。只要掌握坐标系转换即可。 注意相机和Canvas不要用错。
public class UIFollowWorldObject : MonoBehaviour
{
public Camera camera;
public GameObject target;
public bool alwaysFollow = true;
bool hasFollowed = false;
public Canvas canvas;
public void Init()
{
FollowObject();
}
public void Update()
{
FollowObject();
}
void FollowObject()
{
if (!alwaysFollow && hasFollowed)
return;
if (camera != null && target != null)
{
Vector2 pos = camera.WorldToScreenPoint(target.transform.position);
Vector2 point;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.parent as RectTransform, pos, canvas.worldCamera, out point))
{
transform.localPosition = new Vector3(point.x, point.y, 0);
hasFollowed = true;
}
}
}
}