I'm in the process of creating a small options screen which contains a slider which I want to directly affect the sensitivity of the FPS controller. Since I have multiple cameras, and they all have mouse look scripts, is there a way to affect the core input settings of the program so I don't have to go around referencing each camera/mouselook script manually?
This is something where it would be appropriate to set a static variable, and then have the mouselook script multiply input by that static variable. --Eric
I just realised that the mouselook script is written in C# and my scripts are all in js. I'm having trouble passing variables between the two. Is there an example I can follow somewhere?
you can't pass variables between C# and JS, you can only access in one direction, given one of the two is in an earlier buildtstep (see the advanced topics in the manual)
I re-wrote MouseLook in js a while ago for that reason: Code (csharp): @script AddComponentMenu ("Camera-Control/Mouse Look") enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } var axes = RotationAxes.MouseXAndY; var sensitivityX : float = 15; var sensitivityY : float = 15; var minimumX : float = -360; var maximumX : float = 360; var minimumY : float = -60; var maximumY : float = 60; var rotationX : float = 0; var rotationY : float = 0; private var originalRotation : Quaternion; function Update () { if (axes == RotationAxes.MouseXAndY) { rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationX = ClampAngle (rotationX, minimumX, maximumX); rotationY = ClampAngle (rotationY, minimumY, maximumY); var xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up); var yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left); transform.localRotation = originalRotation * xQuaternion * yQuaternion; } else if (axes == RotationAxes.MouseX) { rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationX = ClampAngle (rotationX, minimumX, maximumX); xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up); transform.localRotation = originalRotation * xQuaternion; } else { rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = ClampAngle (rotationY, minimumY, maximumY); yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left); transform.localRotation = originalRotation * yQuaternion; } } function Start () { if (rigidbody) rigidbody.freezeRotation = true; originalRotation = transform.localRotation; } static function ClampAngle (angle : float, min : float, max : float) : float { if (angle < -360.0) angle += 360.0; if (angle > 360.0) angle -= 360.0; return Mathf.Clamp (angle, min, max); } --Eric
Eric, thanks loads for sharing. Haven't tried it yet but cheers in advance. Edit: Implemented and works perfectly.