- Home /
Player shaking when move (not the camera)
I'm making a simple game. It's a cube, walking on a floor.
I use the WASD keys to move. W and S to move foward and backward, S and D to side walking and the X mouse axis to rotation.
The camera isn't attach to the cube and use a script to follow the cube. The camera position and rotation is calculate based on the cube.
My problem it's simple... When I walk just to front, back or side walking, it's fine, but when I walk in diagonals (e.g. Sidewalking and front), the cube make a zigzag movement, him shake.
Isn't the camera, 'cause in the scene window I see making this strange movement.
I guess that I need some "Smoothing-system" somewhere in the calcs of the directional vector.
Somebody can Help me?
Here are the only two scripts used in scene
Script that control the player using UnityEngine; using System.Collections;
public class PlayerControl : MonoBehaviour {
private CharacterController controller;
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Vector3 Pdirection = Vector3.zero;
public float mouseSens = 0.2f;
private bool locked = true;
void Start () {
Screen.lockCursor = locked;
}
void FixedUpdate () {
controller = GetComponent<CharacterController> ();
if (controller.isGrounded) {
Pdirection = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
Pdirection = transform.TransformDirection(Pdirection);
Pdirection *= speed;
}
Pdirection.y -= gravity * Time.deltaTime;
print (Pdirection);
controller.Move (Pdirection * Time.deltaTime);
controller.transform.Rotate(0, Input.GetAxis ("Mouse X")*mouseSens*Time.deltaTime, 0);
if (Input.GetButton ("MouseLock")) {
locked = !locked;
print(locked);
Screen.lockCursor = locked;
}
}
}
Script that control the camera:
using UnityEngine;
using System.Collections;
public class CameraControl : MonoBehaviour {
public float distancia = 10;
public Transform target;
void Start () {
}
void Update () {
if (!target)
return;
float anguloFinal = target.transform.eulerAngles.y;
float distanciaFinal = target.transform.position.y + distancia;
float anguloAtual = transform.eulerAngles.y;
float distanciaAtual = transform.position.y;
anguloAtual = Mathf.LerpAngle (anguloAtual, anguloFinal, Time.deltaTime*0.1f);
distanciaFinal = Mathf.Lerp (distanciaAtual, distanciaFinal, Time.deltaTime * 0.1f);
Quaternion angulo = Quaternion.Euler (0, anguloFinal, 0);
Vector3 posicaoFinal = transform.position;
posicaoFinal = target.transform.position;
posicaoFinal -= angulo * Vector3.forward * distancia;
posicaoFinal.y = distanciaFinal;
transform.position = posicaoFinal;
transform.LookAt (target);
}
}
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
All Unity Engine games' controls not working 1 Answer
How to limit the forces applied to an object to just forward, left, and right? 0 Answers
Player making Zigzag movement 0 Answers
how do i move my player left and right using touch pad? 1 Answer