- Home /
Strange problem with crouch script
Hello everyone, I'm having trouble with this script that allow the player to crouch. I just can't figure out why my charachter can't move left, right or back but just forward... It is also strange because the Max Forward Speed, the Max Sideways Speed and the Max Backwards Speed values of the Character Motor are changing according to the script! So the problem is not here, I guess!
Maybe I should create a new state when the player is chouched?
However this is the script, i hope that someone can hepl me! :)
//What is doing the player?
var PlayerState : float;
//The Player Character Motor
var PlayerMotor : CharacterMotor;
//Different speed for different action
var WalkingSpeed : float = 8;
var SprintingSpeed : float = 10;
var CrouchSpeed : float = 5;
var LooseStamina : float;
var LightArmorWalkingSpeed : float = 7;
var LightArmorSprintingSpeed : float = 9;
var LightArmorCrouchSpeed : float = 4;
var LightArmorLooseStamina : float;
var MediumArmorWalkingSpeed : float = 6;
var MediumArmorSprintingSpeed : float = 8;
var MediumArmorCrouchSpeed : float = 3;
var MediumArmorLooseStamina : float;
var HeavyArmorWalkingSpeed : float = 5;
var HeavyArmorSprintingSpeed : float = 7;
var HeavyArmorCrouchSpeed : float = 2;
var HeavyArmorLooseStamina : float;
var HealthAndArmorScript : HealthArmorStaminaLuck;
//Important thing for crouch
private var charController : CharacterController;
private var theTransform : Transform;
private var charHeight : float;
var isCrouched : boolean;
//Other Stuff
var PlayerBossController : CharacterController;
var CharacterMag;
var CharacterMotorScript : CharacterMotor;
function Start ()
{
theTransform = transform;
charController = GetComponent(CharacterController);
charHeight = charController.height;
}
function Update ()
{
//This is for the crouch
var h = charHeight;
if (Input.GetButton("Crouch"))
{
h = charHeight * 0.5;
isCrouched = true;
}
else
{
isCrouched = false;
}
var lastHeight = charController.height; //Stand up/crouch smoothly
charController.height = Mathf.Lerp(charController.height, h, 5 * Time.deltaTime);
theTransform.position.y += (charController.height-lastHeight)/2; //Fix vertical position
//Calling other function. See them for more information.
PlayerStateController();
PlayerStates();
CharacterMag = PlayerBossController.velocity.magnitude;
}
function PlayerStateController()
{
if ((Input.GetAxis("Vertical") !=0 || Input.GetAxis("Horizontal") !=0) && Input.GetButton("Sprint") && PlayerBossController.isGrounded)
{
PlayerState = 2;
}
else
{
PlayerState = 1;
}
}
function PlayerStates ()
{
if (PlayerState == 1 && PlayerBossController.isGrounded && HealthAndArmorScript.NoArmor == true && isCrouched == false)
{
//PlayerAnimSec.animation["Walking Animation"].speed = CharacterMag/WalkingSpeed;
//PlayerAnimSec.animation.CrossFade("Walking Animation");
HealthAndArmorScript.CanRegen = true;
PlayerMotor.movement.maxForwardSpeed = WalkingSpeed;
PlayerMotor.movement.maxBackwardsSpeed = WalkingSpeed/2;
PlayerMotor.movement.maxSidewaysSpeed = WalkingSpeed/1.25;
}
else if (PlayerState == 1 && PlayerBossController.isGrounded && HealthAndArmorScript.NoArmor == true && isCrouched == true)
{
//PlayerAnimSec.animation["Walking Animation"].speed = CharacterMag/WalkingSpeed;
//PlayerAnimSec.animation.CrossFade("Walking Animation");
HealthAndArmorScript.CanRegen = true;
PlayerMotor.movement.maxForwardSpeed = CrouchSpeed;
PlayerMotor.movement.maxBackwardsSpeed = CrouchSpeed/2.15;
PlayerMotor.movement.maxSidewaysSpeed = CrouchSpeed/1.55;
}
}
Comment