//根据视口坐标 更新UI的位置 private void UpdatePlayerUIPos() { Camera cc3d = Camera3d.GetComponent<Camera>(); for (int i = 0; i < GameLogic.GAME_PLAYER; i++) { if (i == 0) continue; //先是座椅位置在3D相机的视口,往上面走一下,椅子底面往上走到中间 Vector3 viewPoint = cc3d.WorldToViewportPoint(SeatCtr.Instance.char_roots[i].position + new Vector3(0,6f,0)); viewPoint = new Vector3(viewPoint.x, viewPoint.y,0); //3D视口转2D相机的世界坐标 o_player_nick[i].transform.parent.position = Camera.main.ViewportToWorldPoint(viewPoint); } }
无论是什么相机渲染到屏幕上都是限制在[0,1]之间的(视口坐标),通过这个作为中间体,两个相机可以通过这个将某一个相机渲染的东西的位置对应到另外一个相机渲染的位置上。视觉上就可以实现的就是昵称等UI跟着角色模型走。