Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Sensitivity in my MouseLook script.

Discussion in 'Scripting' started by JustYourFriendlyNeighbourhoodSlug, Feb 20, 2021.

  1. JustYourFriendlyNeighbourhoodSlug

    JustYourFriendlyNeighbourhoodSlug

    Joined:
    Aug 24, 2020
    Posts:
    24
    Code (CSharp):
    1.     public float sensitivity = 50f;
    2.     public float maxYAngle = 80f;
    3.     private Vector2 currentRotation;
    4.  
    5.     public Transform Player;
    6.  
    7.     public Vector3 PlayerFacing;
    8.  
    9.     void Update()
    10.     {
    11.         currentRotation.x += Input.GetAxis("Mouse X") * sensitivity //* Time.deltaTime;
    12.         currentRotation.y -= Input.GetAxis("Mouse Y") * sensitivity //* Time.deltaTime;
    13.         currentRotation.x = Mathf.Repeat(currentRotation.x, 360);
    14.         currentRotation.y = Mathf.Clamp(currentRotation.y, -maxYAngle, maxYAngle);
    15.         Camera.main.transform.rotation = Quaternion.Euler(currentRotation.y, currentRotation.x, 0);
    16.  
    17.         Player.rotation = Quaternion.Euler(PlayerFacing);
    18.         PlayerFacing = new Vector3(0, Camera.main.transform.localRotation.eulerAngles.y, 0);
    19.         Camera.main.transform.position = new Vector3(Player.position.x, Player.position.y +1, Player.position.z);
    20.     }
    This is the MouseLook script for a game I'm working on (been a while since I have done any unity :/). My question about this is: why does the sensitivity variable not change anything? When I try to run the script the mouse feels much too sensitive, and my first instinct was to add in a sensitivity variable (It's turned up to 50 here for testing reasons) and fine-tune it; however, no matter what I change the variable to, the sensitivity doesn't change. I also looked up example scripts that sometimes used deltaTime but that just made the entire thing super slow. Any help greatly appreciated.
     
  2. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    36,336
    Whatever value you set and save in your scene or prefab will wipe out the field initializer value you change in the code above.

    This is a common source of confusion: the object is created, so at that instant in time it has the value you set in code, but before the object is put into use, if Unity has a saved scene or saved prefab that this is already in, then the value saved is overwritten.

    It's best to remove the initialization value above and instead provide it in a Reset function:

    Code (csharp):
    1. public float sensitivity;  // don't put initializer here! it can be confusing!
    2.  
    3. // only runs in the editor when this is added to a GameObject.
    4. // can also be invoked from the upper right corner of the inspector (the hamburger)
    5. void Reset()
    6. {
    7.   sensitivity = 80.0f;
    8. }
    That way it is clear when the value will be changed. Once this script instance is used in a scene or prefab, only change the saved value in the scene or prefab.

    OR... if it is just a code-specified value only, make the variable private, not public, and do not decorate it for serialization.
     
    Last edited: Jul 4, 2021
    aynurin and uotsabchakma like this.
  3. JustYourFriendlyNeighbourhoodSlug

    JustYourFriendlyNeighbourhoodSlug

    Joined:
    Aug 24, 2020
    Posts:
    24
    Thank you so much, I set the variable to private and that fixed the whole thing.
     
    Kurt-Dekker likes this.