前言
如题的需求,让UI的窗体跟随场景中模型进行移动,现在很多游戏的血条就是按这个进行;如果我们直接使用世界中的Canvas,每个窗体都需要一个Canvas,消耗很大,我们一般还是在屏幕内同步显示UI的方式。
效果
![在这里插入图片描述](https://img-blog.csdnimg.cn/99762b31de0c4131b29ab63165cdc680.gif#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d2f2a275cd34d8aa21bf1c2e450aac0.gif#pic_center)
如上就是同步的效果。
实现
UI搭建
按如图搭建UI
![在这里插入图片描述](https://img-blog.csdnimg.cn/ec307e2bf8cb4e0ea85351a7001f4d62.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Y2B5bm65Y2c5YWl,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
重点是pivot是UI的同步点,如果调整不准可以用偏移值修正。
定义变量
[Header("跟随的物体")]
public Transform FollowTran;
[Header("偏移值")]
public Vector2 Offset;
RectTransform ParentTran, Rtran;
同步位置
if (FollowTran != null)
{
Vector2 mScreenPos = Camera.main.WorldToScreenPoint(FollowTran.transform.position);
Vector2 mRectPos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(ParentTran, mScreenPos, null, out mRectPos);
Rtran.localPosition = mRectPos + Offset;
}
思路就是世界坐标转屏幕点;通过屏幕点再转为UI位置即可。
源码工程
https://download.csdn.net/download/qq_33789001/33465355
|