Question by 
               Kapuetze · Aug 13, 2016 at 08:00 AM · 
                cameracollision detection  
              
 
              Camera Wall Collision is buggy
Hello guys,
I've been working on this problem since 5 hours but I cant figure out a good solution. So here is the problem: I have a script for collision detection with walls. It basically sets the camera position to a certain distance to the player, based on where a Ray hit happens. The problem is, that i want to set the distance to max distance if nothing is hit. What is happening now is that it is set everytime the currentDistance is adjusted, because then there is no hit. This is causing the camera to constantly jumping around.
Thanks for any help!
Here is my code:
     // Use this for initialization
     void Start()
     {
 
         cameraTransform = transform;
         cameraPosition = transform.position;
         cam = Camera.main;
         dollyDir = transform.localPosition.normalized;
 
         //        collision.Initialize(Camera.main);
         //        collision.UpdateCameraClipPoints(transform.position, transform.rotation, ref collision.adjustedCameraClipPoints);
         //        collision.UpdateCameraClipPoints(desiredCameraPos, transform.rotation, ref collision.desiredCameraClipPoints);
 
 
     }
 
     private void Update()
     {
 
         currentX += Input.GetAxis("Mouse X");
         currentY += Input.GetAxis("Mouse Y");
 
         currentY = Mathf.Clamp(currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
 
         desiredCameraPos = lookAt.TransformPoint(dollyDir * maxDistance);
         RaycastHit hit;
         RaycastHit backhit;
         float newdistance = 1f;
         Ray topLeft = Camera.main.ScreenPointToRay(new Vector3(0, 0, 0));
         Ray topRight = Camera.main.ScreenPointToRay(new Vector3(Screen.width, 0, 0));
         Ray botRight = Camera.main.ScreenPointToRay(new Vector3(Screen.width, Screen.height, 0));
         Ray botLeft = Camera.main.ScreenPointToRay(new Vector3(0, Screen.height, 0));
         //        if (Physics.Linecast(lookAt.position, desiredCameraPos, out hit))
         //        {
         //            currentDistance = Mathf.Clamp(hit.distance, minDistance, maxDistance);
         //        }
 
         Debug.DrawLine(lookAt.position, botRight.GetPoint(pointOnClippingRay), Color.cyan);
         Debug.DrawLine(lookAt.position, topRight.GetPoint(pointOnClippingRay), Color.cyan);
         Debug.DrawLine(lookAt.position, botLeft.GetPoint(pointOnClippingRay), Color.cyan);
         Debug.DrawLine(lookAt.position, topLeft.GetPoint(pointOnClippingRay), Color.cyan);
         
         if (Physics.Linecast(lookAt.position, botRight.GetPoint(pointOnClippingRay), out hit) || Physics.Linecast(lookAt.position, topRight.GetPoint(pointOnClippingRay), out hit) || Physics.Linecast(lookAt.position, topLeft.GetPoint(pointOnClippingRay), out hit) || Physics.Linecast(lookAt.position, botLeft.GetPoint(pointOnClippingRay), out hit))
         {
             newdistance = Mathf.Abs(hit.distance - currentDistance);
             currentDistance = Mathf.Clamp(hit.distance, minDistance, maxDistance);
         }
         //if(!Physics.Linecast(cameraTransform.position, -cameraTransform.forward, out hit, 1))
         //{
         //    currentDistance = maxDistance;
         //}
         else //if(!Physics.Raycast(cameraTransform.position, -cameraTransform.forward, out hit, 1) ))
             currentDistance = maxDistance;
 
    
     }
     // Update is called once per frame
     void LateUpdate()
     {
 
         Vector3 dir = new Vector3(0, 0, -currentDistance);
         Quaternion rotation = Quaternion.Euler(-currentY, currentX, 0);
         cameraTransform.position = lookAt.position + rotation * dir;
         cameraTransform.LookAt(lookAt.position);
 
         /*
         if(currentDistance < 2)
         {
             lookAtObject.GetComponent<Renderer>().material.color = new Color(1f, 0.92f, 0.016f, 0.3f);
         }
         */
     }
 
              
               Comment
              
 
               
              Your answer