vglass_unitybug - daaoling/daaoling.github.io GitHub Wiki

WorldToViewportPoint 的一个血案

The bottom-left of the camera is (0,0); the top-right is (1,1)

pic

很奇怪 明明是在左下角 怎么坐标打印出来会在右上角

参考了一下 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.transform 最好不要用 因为Camera.main.setactive(false)的时候会Camera.main = null

⚠️ **GitHub.com Fallback** ⚠️