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
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.