How to add avoid the script to overwrite camera collision?
Hi there! I'm making a kind of a customizer app with one object in the middle so the user can use a camera to zoom on it, rotate, and move around. To create this camera I used the code from this question: https://answers.unity.com/questions/1443572/camera-controls-like-sketchfab-or-similar.html and it works exactly how I want to [it's pasted below].
The problem is that this code disable the collider function. I don't want the user to fly "into" the object, so I need to create a collider for the camera and the object. But the mentioned code does not allow to use standard collider and rigidbody components. How can I use the function OnCollisionEnter (or any other) in this code to prevent the camera from flying into the object?
 using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;
  
  [AddComponentMenu("Camera-Control/3dsMax Camera Style")]
  public class maxCamera : MonoBehaviour
  {
      public Transform target;
      public Vector3 targetOffset;
      public float distance = 5.0f;
      public float maxDistance = 20;
      public float minDistance = .6f;
      public float xSpeed = 200.0f;
      public float ySpeed = 200.0f;
      public int yMinLimit = -80;
      public int yMaxLimit = 80;
      public int zoomRate = 40;
      public float panSpeed = 0.3f;
      public float zoomDampening = 5.0f;
  
      private float xDeg = 0.0f;
      private float yDeg = 0.0f;
      private float currentDistance;
      private float desiredDistance;
      private Quaternion currentRotation;
      private Quaternion desiredRotation;
      private Quaternion rotation;
      private Vector3 position;
  
      void Start() { Init(); }
      void OnEnable() { Init(); }
  
      public void Init()
      {
          //If there is no target, create a temporary target at 'distance' from the cameras current viewpoint
          if (!target)
          {
              GameObject go = new GameObject("Cam Target");
              go.transform.position = transform.position + (transform.forward * distance);
              target = go.transform;
          }
  
          distance = Vector3.Distance(transform.position, target.position);
          currentDistance = distance;
          desiredDistance = distance;
  
          //be sure to grab the current rotations as starting points.
          position = transform.position;
          rotation = transform.rotation;
          currentRotation = transform.rotation;
          desiredRotation = transform.rotation;
  
          xDeg = Vector3.Angle(Vector3.right, transform.right);
          yDeg = Vector3.Angle(Vector3.up, transform.up);
      }
  
      /*
       * Camera logic on LateUpdate to only update after all character movement logic has been handled. 
       */
      void LateUpdate()
      {
          // If Control and Alt and Middle button? ZOOM!
          if (Input.GetMouseButton(2))
          {
              desiredDistance -= Input.GetAxis("Mouse Y") * Time.deltaTime * zoomRate * 0.125f * Mathf.Abs(desiredDistance);
          }
          // If middle mouse and left alt are selected? ORBIT
          if (Input.GetMouseButton(0))
          {
              xDeg += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
              yDeg -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
  
              ////////OrbitAngle
  
              //Clamp the vertical axis for the orbit
              yDeg = ClampAngle(yDeg, yMinLimit, yMaxLimit);
              // set camera rotation 
              desiredRotation = Quaternion.Euler(yDeg, xDeg, 0);
              currentRotation = transform.rotation;
  
              rotation = Quaternion.Lerp(currentRotation, desiredRotation, Time.deltaTime * zoomDampening);
              transform.rotation = rotation;
          }
          // otherwise if middle mouse is selected, we pan by way of transforming the target in screenspace
          else if (Input.GetMouseButton(2))
          {
              //grab the rotation of the camera so we can move in a psuedo local XY space
              target.rotation = transform.rotation;
              target.Translate(Vector3.right * -Input.GetAxis("Mouse X") * panSpeed);
              target.Translate(transform.up * -Input.GetAxis("Mouse Y") * panSpeed, Space.World);
          }
  
          ////////Orbit Position
  
          // affect the desired Zoom distance if we roll the scrollwheel
          desiredDistance -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * zoomRate * Mathf.Abs(desiredDistance);
          //clamp the zoom min/max
          desiredDistance = Mathf.Clamp(desiredDistance, minDistance, maxDistance);
          // For smoothing of the zoom, lerp distance
          currentDistance = Mathf.Lerp(currentDistance, desiredDistance, Time.deltaTime * zoomDampening);
  
          // calculate position based on the new currentDistance 
          position = target.position - (rotation * Vector3.forward * currentDistance + targetOffset);
          transform.position = position;
      }
  
      private static float ClampAngle(float angle, float min, float max)
      {
          if (angle < -360)
              angle += 360;
          if (angle > 360)
              angle -= 360;
          return Mathf.Clamp(angle, min, max);
      }
  }
 
              Your answer
 
             Follow this Question
Related Questions
Making my walls disappear by touching the floor 0 Answers
About Camera Collision 2 Answers
how to solve Box Collider corner problem ? 0 Answers
Adding collision to enemy model. Please help! 0 Answers
Problem with collision 2 Answers