- Home /
Cursor Lock to Center of screen script doesnt work please help.
My custom mouse look script is meant to lock the cursor in the center on the screen but it does not work for some reason. if you can also tell me how to make the script run in delta time that would be awesome to as this would help me with another problem with the pause menu.
@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;
public var lockCursor : boolean;
private var originalRotation : Quaternion;
// Called when the cursor is actually being locked
function DidLockCursor () {
Debug.Log("Locking cursor");
// Disable the button
guiTexture.enabled = false;
}
// Called when the cursor is being unlocked
// or by a script calling Screen.lockCursor = false;
function DidUnlockCursor () {
Debug.Log("Unlocking cursor");
// Show the button again
guiTexture.enabled = true;
}
function OnMouseDown () {
// Lock the cursor
Screen.lockCursor = true;
}
private var wasLocked = false;
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;
}
// In standalone player we have to provide our own key
// input for unlocking the cursor
if (Input.GetKeyDown ("escape"));
Screen.lockCursor = false;
// Did we lose cursor locking?
// eg. because the user pressed escape
// or because he switched to another application
// or because some script set Screen.lockCursor = false;
if (!Screen.lockCursor && wasLocked) {
wasLocked = false;
DidUnlockCursor();
}
// Did we gain cursor locking?
else if (Screen.lockCursor && !wasLocked) {
wasLocked = true;
DidLockCursor ();
}
}
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);
}
thanks again...
Answer by Kleptomaniac · Apr 14, 2012 at 10:10 AM
As is said here, it isn't possible to set the cursor position without external .dlls. Screen.lockCursor doesn't automatically set the position of the cursor to the centre of the screen, it only locks the position of the mouse at the current mouse position.
Also, Screen.lockCursor is already a boolean. There is no need to redeclare it as a boolean.
Hope that helps, Klep
Thanks for the Reply, don't suppose you know how to make the script run in deltatime so when i do time.Deltatime =0; the script stops as well as the whole game. Currently the whole game stops correctly except for the main camera which can still move.
I'm not exactly sure what you mean ... Time.deltaTime is a measure in milliseconds of how long it took to render the previous frame ... are you talking about Time.timeScale? Setting this to 0 will stop the game.
If you want to stop the main camera from moving, try this:
private var mouseX : $$anonymous$$ouseLook;
private var mouseY : $$anonymous$$ouseLook;
function Start () {
mouseX = Camera.main.transform.parent.GetComponent($$anonymous$$ouseLook);
mouseY = Camera.main.GetComponent($$anonymous$$ouseLook);
}
function Update () {
if (//Condition is met) {
mouseX.enabled = false;
mouseY.enabled = false;
}
}
Answer by MonsterGamingHD · May 04, 2013 at 10:51 PM
You can use this script to lock and hide your cursor
Lock:
screen.lockCursor = true;
Hide:
screen.showCursor = false;
I tried that and it said "unknown identifier: 'screen' ". XD
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Script to disable MouseLook? 2 Answers
Items with Statistics(such as attack damage) that actually effect the character? 2 Answers
Help needed with a pickup script 2 Answers
Only In Range 1 Answer