0

所以我试图检测我的玩家相机是在凹面对撞机(管)内部还是外部。我目前的方法如下所示:

 void Update () {
    int layerMask = 0x1 << LayerMask.NameToLayer("Tube");
    int maxLen = 1000;
    var camDir = cam.transform.forward;

    RaycastHit hit1;
    if (Physics.Raycast(cam.transform.position, camDir, out hit1, maxLen, layerMask))
    {
        //Camera is either inside or outside the tube
        Debug.DrawLine(cam.transform.position, hit1.point, Color.green);

        RaycastHit hit2;
        if (Physics.Raycast(hit1.point + camDir, camDir, out hit2, maxLen, layerMask))
        {
            //Ray hits concave tube twice (outside and inside)
            //So camera is definitely outside.
            Debug.DrawLine(hit1.point + camDir, camDir, Color.cyan);
            Debug.Log("Camera is outside!");
        }else
        {
            Debug.Log("Camera is inside!");
        }
    }    
}

从理论上讲,如果两条射线相撞,那么我们就在管外。(一个在外面,一个在里面)。但不知何故,Raycasts 忽略了对撞机的外部,它直接通过了。有什么方法可以防止这种情况,或者可能有更好的解决方案?注:绿线为射线

4

0 回答 0