- Home /
Question by
DoctorChar · Sep 02, 2017 at 11:42 PM ·
cameraglitchcamera movement
Camera Is glitching when I move
Hi, I am trying to make an open world game but my camera keeps glitching when I move. This is the script on my camera:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour
{
public float sensitivity = 5.0f;
public float smoothing = 2.0f;
public GameObject player;
public Transform centre;
private Vector3 offset;
public Transform target;
Vector2 mouseLook;
Vector2 smoothV;
GameObject character;
void Start()
{
character = this.transform.parent.gameObject;
}
void Update()
{
//transform.LookAt(target);
var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
mouseLook += smoothV;
transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
if (Input.GetKeyDown("enter"))
{
Cursor.lockState = CursorLockMode.Locked;
}
}
}
Thanks!
Comment
Answer by orrinjones · Sep 03, 2017 at 03:25 PM
I would suggest un-parenting your camera from the player. and use this script:
using UnityEngine;
/* COMPLETED */
namespace Others
{
public class cameraRig : MonoBehaviour
{
private void Start()
{
var customCamFollowPoints = GameObject.FindGameObjectsWithTag("camTarget");
foreach (GameObject b in customCamFollowPoints)
{
if (b.transform.parent.gameObject.activeSelf)
{
target = b.transform;
}
}
}
private Vector3 velocity = Vector3.zero;
// The target we are following
private Transform target;
[Tooltip("How long it takes for this object to transition to the targets position. Only is lerp is off")]
public float smoothTime = 0.2f;
public float _wantedRotationalAngle = 0f;
// The distance in the x-z plane to the target
public float distance = 27f;
// the height we want the camera to be above the target
public float height = 19f;
public float rotationDamping = 8;
public float heightDamping = 10;
private void OnEnable()
{
// LoadPlayer.OnLoadPlayer += getTarget;
}
private void OnDisable()
{
// LoadPlayer.OnLoadPlayer -= getTarget;
}
/// <summary>
/// Search for te gameobject with tag "camtarget"
/// </summary>
private void getTarget()
{
target = GameObject.FindGameObjectWithTag("camTarget").transform;
Debug.Log("Target found. Target name is :" + target.gameObject.name);
}
// Update is called once per frame
void LateUpdate()
{
camFollowMethod();
}
public void camFollowMethod()
{
// Early out if we don't have a target
if (target == null)
return;
// Calculate the current rotation angles
var wantedHeight = target.position.y + height;
var currentRotationAngle = transform.eulerAngles.y;
var currentHeight = transform.position.y;
// Damp the rotation around the y-axis\
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, _wantedRotationalAngle, rotationDamping * Time.deltaTime);
// Damp the height
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
// Convert the angle into a rotation
var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
// Set the position of the camera on the x-z plane to:
// distance meters behind the target
transform.position = target.position;
transform.position -= currentRotation * Vector3.forward * distance;
// Set the height of the camera
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
// Always look at the target
transform.LookAt(target);
}
}
}
I have more than one targets in a scene that why i use customCamFollowPoints array but you can just make target var public and delete unity start method.
Your answer
Follow this Question
Related Questions
Scene is zoomed in when I click play? 3 Answers
Camera follow players z axis 0 Answers
Strange graphics glitch? 1 Answer