camera is bouncing on mesh

Hi All,

i have a camera with a box collider, a rigid boy and all my mesh have mesh colliders. As soon as my camera touches a mesh, the camera starts bouncing around.

any idea why?

ty

I’d guess you’re telling the camera to go through one of these mesh colliders, but having its own collider is preventing it. It really depends on what “bouncing around” really means, what settings you’re using on the camera rigidbody, and what your camera controller code actually does.

Hello, the camera does not actually go through meshes since they have their own collider and the camera has a box collider around it and a rigid body. The camera actually works fine until i touch a mesh then it starts to bounce like… a ball.

the settings of the camera’s rigid body are like this->
Mass: 50
Drag 0
Angular Drag 0
No gravity
No kinematic
Interpolate Non
Collision discrete
No constraints

Here is the camera script im using.

thanks

using UnityEngine;
using System.Collections;
public class ExtendedFlycam : MonoBehaviour
{
    /*
    EXTENDED FLYCAM
        Desi Quintans (CowfaceGames.com), 17 August 2012.
        Based on FlyThrough.js by Slin (http://wiki.unity3d.com/index.php/FlyThrough), 17 May 2011.
    LICENSE
        Free as in speech, and free as in beer.
    FEATURES
        WASD/Arrows:    Movement
                  Q:    Climb
                  E:    Drop
                      Shift:    Move faster
                    Control:    Move slower
                        End:    Toggle cursor locking to screen (you can also press Ctrl+P to toggle play mode on and off).
    */
    public float cameraSensitivity = 90;
    public float climbSpeed = 4;
    public float normalMoveSpeed = 10;
    public float slowMoveFactor = 0.25f;
    public float fastMoveFactor = 3;
    private float rotationX = 0.0f;
    private float rotationY = 0.0f;
    void Start ()
    {
        Screen.lockCursor = true;
    }
    void Update ()
    {
        rotationX += Input.GetAxis("Mouse X") * cameraSensitivity * Time.deltaTime;
        rotationY += Input.GetAxis("Mouse Y") * cameraSensitivity * Time.deltaTime;
        rotationY = Mathf.Clamp (rotationY, -90, 90);
        transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
        transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
         if (Input.GetKey (KeyCode.LeftShift) || Input.GetKey (KeyCode.RightShift))
         {
            transform.position += transform.forward * (normalMoveSpeed * fastMoveFactor) * Input.GetAxis("Vertical") * Time.deltaTime;
            transform.position += transform.right * (normalMoveSpeed * fastMoveFactor) * Input.GetAxis("Horizontal") * Time.deltaTime;
         }
         else if (Input.GetKey (KeyCode.LeftControl) || Input.GetKey (KeyCode.RightControl))
         {
            transform.position += transform.forward * (normalMoveSpeed * slowMoveFactor) * Input.GetAxis("Vertical") * Time.deltaTime;
            transform.position += transform.right * (normalMoveSpeed * slowMoveFactor) * Input.GetAxis("Horizontal") * Time.deltaTime;
         }
         else
         {
             transform.position += transform.forward * normalMoveSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
            transform.position += transform.right * normalMoveSpeed * Input.GetAxis("Horizontal") * Time.deltaTime;
         }
        if (Input.GetKey (KeyCode.Q)) {transform.position += transform.up * climbSpeed * Time.deltaTime;}
        if (Input.GetKey (KeyCode.E)) {transform.position -= transform.up * climbSpeed * Time.deltaTime;}
        if (Input.GetKeyDown (KeyCode.End))
        {
            Screen.lockCursor = (Screen.lockCursor == false) ? true : false;
        }
    }
}

That’s not necessarily true- since you are updating the transform position directly, that means that you are actually bypassing any collision detection during the camera movement.