Hey, I have been making a simple FPS controller with added functions. Although after adding things to my code, the mouseRotationRightLeft seems to be constrained to 0 (the other object that is constrained is working fine). I would like to rotate the character on the y axis based of mouse movement and I do not know which part of the code is messing things up. Thanks for going through the time to look at my code (I know it’s long)!
@HideInInspector
var controller:CharacterController;
private var mouseRotationUpDown:float;
var teleportInSFX:AudioClip;
var teleportOutSFX:AudioClip;
var teleportParticle:GameObject;
var rifleBulletPrefab:GameObject;
var rifleGunFireSFX:AudioClip;
var rifleReloadSFX:AudioClip;
var slamSpeed:float;
var normalFallSpeed:float;
var normalMoveSpeed:float;
var sprintMoveSpeed:float;
var mouseSensitivity:float;
var jumpHeight:float;
var gunLength:float;
var dashDistance:float;
var maxNumberOfJumps:int;
private var numberOfJumps:int;
private var fallSpeed:float;
@HideInInspector
var moveSpeed:float;
var fireRate:float;
var reloadTime:float;
var maximumAmmo:int;
@HideInInspector
var currentAmmo:int;
@HideInInspector
var verticalVelocity:float;
private var jumpEnable:boolean=true;
private var allowFire:boolean=true;
private var allowReload:boolean=true;
private var allowSlam:boolean=true;
private var sprintEnabled:boolean=true;
private var allowDash:boolean=true;
var recoilForce:float;
var upRecoilSpeed:float;
var downRecoilSpeed:float;
private var startingAngle:Vector3;
private var nuetralRestRecoil:float; // unfiltered recoil angle
private var recoilAngle:Vector3; // smoothed angle
function Start(){
//Find Objects
controller=gameObject.GetComponent(CharacterController);
startingAngle=transform.localEulerAngles;
Screen.lockCursor=true;
currentAmmo=maximumAmmo;
fallSpeed=normalFallSpeed;
}
function Update(){
//Movement
//Axis
var sideMovement:float=Input.GetAxisRaw("Horizontal")*moveSpeed;
var forwardMovement:float=Input.GetAxisRaw("Vertical")*moveSpeed;
//Jump
//Dash
if(Input.GetButtonDown("Sprint")&&!controller.isGrounded&&forwardMovement>=1&&allowDash){
Dash();
}
//Slam
if(Input.GetButton("Sprint")&&!controller.isGrounded&&sideMovement+forwardMovement==0&&allowSlam){
fallSpeed=slamSpeed;
}
verticalVelocity+=Physics.gravity.y*fallSpeed*Time.deltaTime;
//Execution
if(Input.GetButtonDown("Jump")&&jumpEnable&&numberOfJumps<maxNumberOfJumps){
verticalVelocity=jumpHeight;
numberOfJumps++;
}
//Sprint
if(forwardMovement<0){
sprintEnabled=false;
}
var sprinting:boolean=(Input.GetButton("Sprint")&&sprintEnabled)? true:false;
moveSpeed=(sprinting)? sprintMoveSpeed:normalMoveSpeed;
//Vector3
var movementVector:Vector3=Vector3(sideMovement,verticalVelocity,forwardMovement);
movementVector=transform.rotation*movementVector;
//Execution
controller.Move(movementVector*Time.deltaTime);
//Mouse Rotation
//Axis
var mouseRotationRightLeft:float=Input.GetAxis("Mouse X")*mouseSensitivity*Time.deltaTime;
mouseRotationUpDown-=Input.GetAxis("Mouse Y")*mouseSensitivity*Time.deltaTime;
//Clamping
mouseRotationUpDown=Mathf.Clamp(mouseRotationUpDown,-60,60);
//Execution
Camera.main.transform.rotation=Quaternion.Euler(mouseRotationUpDown,mouseRotationRightLeft,0);
//Return normal values
if(controller.isGrounded){
numberOfJumps=0;
fallSpeed=normalFallSpeed;
sprintEnabled=true;
allowDash=true;
}
else{
sprintEnabled=false;
}
//Fire
//is there any bullets?
var bulletInClip:boolean=(currentAmmo>0)? true:false;
//Fire Key
if(Input.GetButton("Fire1")&&allowFire&&bulletInClip){
Fire();
}
//Reload
if(Input.GetButtonUp("Reload")&&allowReload){
Reload();
}
//Recoil
recoilAngle.x=Mathf.Lerp(recoilAngle.x,nuetralRestRecoil,Time.deltaTime*upRecoilSpeed);
transform.localEulerAngles=startingAngle-recoilAngle; // move the camera or weapon
nuetralRestRecoil=Mathf.Lerp(nuetralRestRecoil,0,Time.deltaTime*downRecoilSpeed);
Debug.Log(mouseRotationRightLeft);
}
function Fire(){
allowFire=false;
audio.clip=rifleGunFireSFX;
audio.Play();
Instantiate(rifleBulletPrefab,Camera.main.transform.position+transform.forward*gunLength,transform.rotation);
Recoil();
currentAmmo--;
yield WaitForSeconds(fireRate);
allowFire=true;
}
function Reload(){
allowReload=false;
allowFire=false;
yield WaitForSeconds(reloadTime);
audio.clip=rifleReloadSFX;
audio.Play();
yield WaitForSeconds (audio.clip.length);
currentAmmo=maximumAmmo;
allowReload=true;
allowFire=true;
}
function Dash(){
allowDash=false;
Instantiate(teleportParticle,transform.position,transform.rotation);
AudioSource.PlayClipAtPoint(teleportInSFX,transform.position);
transform.position=Vector3.Lerp(transform.position,transform.position+transform.forward*dashDistance,Time.deltaTime*10);
Instantiate(teleportParticle,transform.position,transform.rotation);
AudioSource.PlayClipAtPoint(teleportOutSFX,transform.position);
}
function Recoil(){
nuetralRestRecoil-=recoilForce;
}