- Home /
Auto-Center 3rd person camera, problem when moving towards the camera
I've made myself a 3rd person camera control object for a retro platformer game, standard WASD movement and UDLR view.
but I'm trying to add an auto center (of which will be toggle-able and adjustable in the options) but when the player walks towards the camera (via. S) the camera jerks back and forth, all other directions work fairly well, sometimes a tiny jitter when moving tot he left, but nothing horrific.
I'm not sure how I should fix this and help would be greatly appreciated, Here is the Camera control script, I keep most variables in public classes so their organised in the inspector.
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class ThirdPersonCameraScript : MonoBehaviour {
[Serializable]
public class ViewInformation
{
[Serializable]
public class Offset
{
public Vector3 positionOffset = new Vector3(0,0,0);
public Vector3 rotationOffset = new Vector3(0,0,0);
public Vector3 directionOffset = new Vector3(0,0,0);
}
[Serializable]
public class Follow
{
public float followWeight = 0;
}
[Serializable]
public class Speed
{
public float horizontalAccel = 3;
public float horizontalSpeed = 6;
public float verticalAccel = 3;
public float verticalSpeed = 6;
public float dampening = 0.2f;
}
public Offset offset;
public Follow follow;
public Speed speed;
}
float horizontalSpeed = 0;
float verticalSpeed = 0;
public ViewInformation view;
protected Transform targetTransform;
void Start () {
}
public void InitiateCamera(Transform _playerTransform)
{
targetTransform = _playerTransform;
}
void View()
{
Vector3 input = new Vector3(Input.GetAxis("VerticalView"), Input.GetAxis("HorizontalView"), 0);
if (input.y != 0)
{
horizontalSpeed += view.speed.horizontalAccel;
if (horizontalSpeed > view.speed.horizontalSpeed) horizontalSpeed = view.speed.horizontalSpeed;
}
else
{
horizontalSpeed -= view.speed.horizontalAccel;
if (horizontalSpeed < 0) horizontalSpeed = 0;
}
if (input.x != 0)
{
verticalSpeed += view.speed.verticalAccel;
if (verticalSpeed > view.speed.verticalSpeed) verticalSpeed = view.speed.verticalSpeed;
}
else
{
verticalSpeed -= view.speed.verticalAccel;
if (verticalSpeed < 0) verticalSpeed = 0;
}
Vector3 direction = transform.eulerAngles;
input.y *= horizontalSpeed;
input.x *= verticalSpeed;
direction += input;
if (direction.x < 270 && direction.x > 60) direction.x = 60;
if (direction.x < 280 && direction.x > 90) direction.x = 280;
direction = Vector3.Lerp(direction, targetTransform.eulerAngles, view.follow.followWeight);
transform.eulerAngles = direction;
Vector3 cameraTarget = targetTransform.position + view.offset.positionOffset;
cameraTarget += transform.rotation * view.offset.rotationOffset;
transform.position = Vector3.Lerp(transform.position, cameraTarget, view.speed.dampening);
}
void FixedUpdate () {
View ();
}
}
Any and all help is greatly appreciated, thanks in advanced,
Bombshell
Your answer
Follow this Question
Related Questions
[Closed] SmoothFollow trouble 0 Answers
How to use Lerp? 1 Answer
Close To Camera Objects 0 Answers
Free Look Camera Pivot 1 Answer
Why is 2d camera not smooth at 30 FPS 0 Answers