- Home /
 
 
               Question by 
               bokivasoski · Sep 16, 2020 at 07:56 PM · 
                c#camera  
              
 
              How can I limit the rotation on the Y axis so the player cant spin the camera 360 in an FPS game?
I have an upcoming project that I have to present on Monday an this is the last bug I have to resolve. It would be nice if someone helped me out and teach me how to apply the axis limiter. Thanks in advance everyone.
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 
 public class CharController_Motor : MonoBehaviour {
 
     private float speed = 10.0f;
 
     public float walkSpeed=7.0f;
     public float runSpeed = 12.0f;
 
     public float sensitivity = 30.0f;
     public float WaterHeight = 15.5f;
     CharacterController character;
     private GameObject cam;
 
     private NavMeshAgent nav;
     private bool AIActive = true;
 
     public GameObject cam1;
     public GameObject cam2;//Nightvision
     //private bool NightVision = false;
 
 
 
 
     float moveFB, moveLR;
     float rotX, rotY;
     
 
     float gravity = -9.8f;
 
     public float Stamina = 10f;
     public float MaxStamina = 10f;
     public int DecayRate = 1;
     public float RefillRate=0.25f;
 
     public GameObject LightBreathing;
     public GameObject HeavyBreathing;
     private bool LightBreath = false;
     private bool HeavyBreath = false;
 
 
     public GameObject LowHealthSound;
 
 
 
     public GameObject PlayerDeath;
 
 
     public GameObject ChaseMusic;
     void Start(){
         //LockCursor ();
     
         character = GetComponent<CharacterController> ();
         SaveScript.PlayerHealth = 30;
     
             
             sensitivity = sensitivity * 1.5f;
             speed = walkSpeed;
             Cursor.visible = false;
 
             cam = cam1;
             cam2.gameObject.SetActive(false);
             LightBreathing.gameObject.SetActive(false);
             HeavyBreathing.gameObject.SetActive(false);
             nav = GetComponent<NavMeshAgent>();
             AIActive = true;
             LowHealthSound.gameObject.SetActive(false);
             PlayerDeath.gameObject.SetActive(false);
             ChaseMusic.gameObject.SetActive(false);
 
     }
 
 
     void CheckForWaterHeight(){
         if (transform.position.y < WaterHeight) {
             gravity = 0f;            
         } else {
             gravity = -9.8f;
         }
     }
 
 
 
     void Update(){
         if (LightBreath == false)
         {
             if (Stamina < 3)
             {
                 LightBreathing.gameObject.SetActive(true);
                 HeavyBreathing.gameObject.SetActive(false);
                 LightBreath = true;
             }
         }
         if (LightBreath == true)
         {
             if (Stamina > 3)
             {
                 LightBreathing.gameObject.SetActive(false);
                 HeavyBreathing.gameObject.SetActive(false);
                 LightBreath = false;
             }
         }
         if (HeavyBreath == false)
         {
             if (Stamina == 0)
             {
                 LightBreathing.gameObject.SetActive(false);
                 HeavyBreathing.gameObject.SetActive(true);
                 HeavyBreath = true;
             }
         }
         if (HeavyBreath == true)
         {
             if (Stamina > 0)
             {
                 LightBreathing.gameObject.SetActive(false);
                 HeavyBreathing.gameObject.SetActive(false);
                 HeavyBreath = false;
             }
         }
         if (Stamina > 0)
         {
 
             if (Input.GetButton("Run"))
             {
                 speed = runSpeed;
                 Stamina = Stamina - DecayRate * Time.deltaTime;
                 if (Stamina < 0)
                 {
                     Stamina = 0;
                 }
                 
             }
             else
             {
                 speed = walkSpeed;
                 Stamina = Stamina + RefillRate * Time.deltaTime;
                 if (Stamina > MaxStamina)
                 {
                     Stamina = MaxStamina;
                 }
             }
         }
         if (Stamina == 0)
         {
             speed = walkSpeed;
             StartCoroutine(StaminaRefill());
         }
         if (SaveScript.PlayerHealth < 5)
         {
             LowHealthSound.gameObject.SetActive(true);
         }
         if (SaveScript.PlayerHealth > 4)
         {
             LowHealthSound.gameObject.SetActive(false);
         }
         if(SaveScript.PlayerHealth <= 0)
         {
             PlayerDeath.gameObject.SetActive(true);
         }
 
 
 
         if (AIActive == true)
         {
             nav.enabled = true;
         }
         else 
         {
             nav.enabled = false;
         }
         if (SaveScript.NightVision==false)
         {
             cam = cam1;
             cam2.gameObject.SetActive(false);//Deactivate NightVision
             SaveScript.NightVision = false;
         }
         if (Input.GetKeyDown(KeyCode.N))
             {
             if (SaveScript.NightVision == false)
             {
                 cam2.gameObject.SetActive(true);//Activate NightVision
                 cam = cam2;
                 SaveScript.NightVision = true;
             }
             else
             {
                 cam = cam1;
                 cam2.gameObject.SetActive(false);//Deactivate NightVision
                 SaveScript.NightVision = false;
             }
         }
 
         moveFB = Input.GetAxis ("Horizontal") * speed;
         moveLR = Input.GetAxis ("Vertical") * speed;
 
         rotX = Input.GetAxis ("Mouse X") * sensitivity;
         rotY = Input.GetAxis ("Mouse Y") * sensitivity;
         
 
         //rotX = Input.GetKey (KeyCode.Joystick1Button4);
         //rotY = Input.GetKey (KeyCode.Joystick1Button5);
 
         CheckForWaterHeight ();
 
 
         Vector3 movement = new Vector3 (moveFB, gravity, moveLR);
 
 
 
         CameraRotation(cam, rotX, rotY);
         
         movement = transform.rotation * movement;
         character.Move (movement * Time.deltaTime);
     
 
     }
 
 
     void CameraRotation(GameObject cam, float rotX, float rotY){        
         transform.Rotate (0, rotX * Time.deltaTime, 0);
         cam.transform.Rotate (-rotY * Time.deltaTime, 0, 0);
         
     }
 
     private void OnTriggerEnter(Collider other)
     {
         if (other.gameObject.CompareTag("Water"))
         {
             AIActive = false;
         }
     }
     private void OnTriggerExit(Collider other)
     {
         if (other.gameObject.CompareTag("Water"))
         {
             AIActive = true;
         }
     }
     IEnumerator StaminaRefill()
     {
         yield return new WaitForSeconds(MaxStamina);//Wait 10 seconds before setting stamina to max
         if (Stamina == 0)
         {
             Stamina = MaxStamina;
         }
     }
 
 }
 
 
              
               Comment
              
 
               
              Answer by Zaeran · Sep 17, 2020 at 06:13 AM
Easiest way is probably to put in a hard cap:
 rotX = Mathf.Max(Input.GetAxis ("Mouse X") * sensitivity, maxValue);
 
              Your answer
 
             Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
Multiple Cars not working 1 Answer
Children Of Player objects jitter 0 Answers
Edit Render Camera programmatically 1 Answer