vglass_unitybug - daaoling/daaoling.github.io GitHub Wiki
The bottom-left of the camera is (0,0); the top-right is (1,1)

很奇怪 明明是在左下角 怎么坐标打印出来会在右上角
参考了一下 https://forum.unity3d.com/threads/camera-worldtoscreenpoint-bug.85311/
应该是因为在摄像头背后的关系 转换到前面来就好了
var cameraForward = Camera.main.transform.forward;
var targetVector = curTarget.transform.position - Camera.main.transform.position;
var doc = Vector3.Dot(cameraForward, targetVector);
Vector3 targetPos = Vector3.zero;
///在摄像头背后
if (doc < 0) {
///curTarget is behind of camera
///project to front camera
var camDot = Vector3.Dot(cameraForward, targetVector);
var proj = (cameraForward * camDot);
var offset1 = (targetVector - proj);
var offset2 = cameraForward * Mathf.Abs(camDot);
targetPos = Camera.main.transform.position + offset2 + offset1;
}
else{
targetPos = curTarget.transform.position;
}
viewPos = Camera.main.WorldToViewportPoint(targetPos);
原理: 这里的z 比较小 可能还要弄大点比较好

update:
换成镜像位置了
Camera.main.transform 最好不要用 因为Camera.main.setactive(false)的时候会Camera.main = null