Hey Guys…My Character Controller is working fine while walking and jumping and all…but when it goes in elevator and elevator goes up it start to be shaky i have attached a video below…
my FPS Character Script is …
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class FPS_Controller : MonoBehaviour {
[System.Serializable]
public class Script_Resources
{
[Header("Script Resources:")]
public Mobile_Joystick Joystick;
public Mobile_Touchpad Touchpad;
public Camera FPS_Camera;
public Button Stance_Button;
}
public Script_Resources Resources;
[System.Serializable]
public class Player_Settings
{
[Header("FPS Player Setting:")]
public Vector3 Stand_Size;
public Vector3 Crouch_Size;
public enum Stances
{Stand,Crouch};
public Stances Current_Stance;
public float Camera_Height;
public float Max_Look_Angle;
public float Move_Cam_Speed;
public float Gravity;
public float Stand_Walk_Speed=12.5f;
public float Crouch_Walk_Speed=2.5f;
public float Max_Climb_Angle;
public string Slide_Object_Tag;
public float Slide_Speed;
public float InAir_SpeedMagnitude=0.3f;
public float Jump_Bob_Speed;
public float Jump_Bob_Magnitude;
}
public Player_Settings FPS_Settings;
//Joystick and touchpad variables
private Vector2 Joystick_Vector=Vector2.zero;
private Vector3 Movement_Vector=Vector3.zero;
private Vector2 Touchpad_Vector=Vector3.zero;
private Vector3 Camrotation_Vector=Vector3.zero;
//Access Private Varibles
private CharacterController Character_Controller;
//other private variables
private bool Is_Sliding=false;
private bool Make_Jump=false;
//ray cast up while crouching to stand for obsticals over head
private Vector3 Ray_UP;
private RaycastHit Ray_Down;
private Vector3 Ray_Down_Position;
private float Cam_Rotation_X;
private float Cam_Rotation_Y;
private float Jetpack_Jump_Height;
private float In_Air_Counter;
private Vector3 Desired_Movement;
void Start () {
Character_Controller = GetComponent<CharacterController> ();
Character_Controller.slopeLimit = FPS_Settings.Max_Climb_Angle;
}
void Update () {
Joystick_Vector = Resources.Joystick.Joystick_Input ();
Touchpad_Vector = Resources.Touchpad.Touchpad_Input ();
Cam_Rotation_X += Touchpad_Vector.y;
Cam_Rotation_Y += Touchpad_Vector.x;
Cam_Rotation_X = Mathf.Clamp (Cam_Rotation_X, -FPS_Settings.Max_Look_Angle, FPS_Settings.Max_Look_Angle);
Resources.FPS_Camera.transform.rotation=Quaternion.Euler (-Cam_Rotation_X,Cam_Rotation_Y,0);
transform.rotation= Quaternion.Euler (Cam_Rotation_Y * Vector3.up);
Ray_UP = transform.TransformDirection (Vector3.up);
Desired_Movement = transform.forward*Joystick_Vector.y + transform.right*Joystick_Vector.x;
if (Character_Controller.isGrounded) {
Check_Sliding ();
if (Is_Sliding) {
Ray_Down_Position = Ray_Down.normal;
Movement_Vector = new Vector3 (Ray_Down_Position.x, -Ray_Down_Position.y, Ray_Down_Position.z);
Vector3.OrthoNormalize (ref Ray_Down_Position, ref Movement_Vector);
Movement_Vector *= FPS_Settings.Slide_Speed;
}
else if (!Is_Sliding) {
Movement_Vector = new Vector3 (Desired_Movement.x, 0, Desired_Movement.z);
if (FPS_Settings.Current_Stance == FPS_Controller.Player_Settings.Stances.Stand)
Movement_Vector *= FPS_Settings.Stand_Walk_Speed;
else if (FPS_Settings.Current_Stance == FPS_Controller.Player_Settings.Stances.Crouch)
Movement_Vector *= FPS_Settings.Crouch_Walk_Speed;
if (Make_Jump && FPS_Settings.Current_Stance != FPS_Controller.Player_Settings.Stances.Crouch && !Physics.Raycast (transform.position, Ray_UP, Jetpack_Jump_Height)) {
Make_Jump = false;
Movement_Vector.y = Jetpack_Jump_Height;
}
}
}
else if (!Character_Controller.isGrounded) {
Movement_Vector.x += Desired_Movement.x*FPS_Settings.InAir_SpeedMagnitude;
Movement_Vector.z += Desired_Movement.z*FPS_Settings.InAir_SpeedMagnitude;
}
Movement_Vector.y -= FPS_Settings.Gravity * Time.deltaTime;
Character_Controller.Move (Movement_Vector * Time.deltaTime);
}
void FixedUpdate()
{
if (FPS_Settings.Current_Stance == FPS_Controller.Player_Settings.Stances.Crouch) {
Resources.Stance_Button.GetComponent<Button> ().interactable = (Physics.Raycast (transform.position, Ray_UP, FPS_Settings.Stand_Size.y)) ? false : true;
}
}
void Check_Sliding ()
{
if (Physics.Raycast(transform.position, -Vector3.up, out Ray_Down, Character_Controller.radius+Character_Controller.height))
Is_Sliding= (Ray_Down.collider.tag==FPS_Settings.Slide_Object_Tag && Vector3.Angle(Ray_Down.normal, Vector3.up) > FPS_Settings.Max_Climb_Angle) ? true : false;
}
void LateUpdate()
{
if (Character_Controller.isGrounded) {
SetCam ();
In_Air_Counter = 0;
}
else if (!Character_Controller.isGrounded) {
Camera_Jump_Bob ();
In_Air_Counter += FPS_Settings.Jump_Bob_Magnitude * Time.deltaTime;
}
}
void SetCam()
{
Resources.FPS_Camera.transform.localPosition = Vector3.Lerp (Resources.FPS_Camera.transform.localPosition,new Vector3(0,FPS_Settings.Camera_Height,0), FPS_Settings.Move_Cam_Speed);
}
void Camera_Jump_Bob()
{
Resources.FPS_Camera.transform.localPosition = Vector3.Lerp (Resources.FPS_Camera.transform.localPosition,new Vector3(0,1-In_Air_Counter,0), FPS_Settings.Jump_Bob_Speed);
}
public virtual void JetPack_Jump(float Jump_Height)
{
if (Character_Controller.isGrounded) {
Jetpack_Jump_Height = Jump_Height;
Make_Jump = true;
}
}
}
and here is moving up platform script
using UnityEngine;
using System.Collections;
public class Moveup : MonoBehaviour {
public float speed;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Translate (Vector3.up * speed * Time.deltaTime);
}
}
and here is video of my problem
any one please help me out of this