在网上看了很多UI跟随3D物体的实现,往往都是用的主相机(Camera.main),用的是Camera.main.WorldToScreenPoint API,但是有些时候UI跟随3D物体用不到主相机,需要用到另一个相机(UI相机),这里有个坑,所以之前我们需要对Canvas组件做一次设置,如下:
首先Render Mode (相机渲染)要改为第二个:Screen Space - Camera,然后Render Camera放入自定义的UI相机,但注意的是,UI相机设置跟随代码,需要用主相机转一下再转回来,否则仍会出现
Render Mode = ScreenSpace的情况,代码如下:
RectTransform t = obj.GetComponent<RectTransform>();
Vector3 worldPosition = new Vector3(pos.x, pos.y + diff, pos.z);
Vector3 vPos = Camera.main.WorldToScreenPoint(worldPosition);
Vector3 p = GameObject.Find("2DCamera").GetComponent<Camera>().ScreenToWorldPoint(vPos);
t.position = p;
obj:UI的GameObject,pos:需要UI所在的位置坐标,可以设置为跟随物体的3D坐标,diff:UI物体离3D物体Y轴差值,2DCamera:自定义的UI相机
注意:如果UI出现很大的情况,占满了屏幕,可以把相机改为正交模式,亲测可用..