x


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...

more ▼

asked Apr 13 '12 at 06:56 PM

phonepl8 gravatar image

phonepl8
2 1 1 2

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

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

more ▼

answered Apr 14 '12 at 10:10 AM

Kleptomaniac gravatar image

Kleptomaniac
2.5k 6 11 21

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.

Apr 14 '12 at 12:57 PM phonepl8

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 : MouseLook;
private var mouseY : MouseLook;

function Start () {

    mouseX = Camera.main.transform.parent.GetComponent(MouseLook);
    mouseY = Camera.main.GetComponent(MouseLook);

}

function Update () {

    if (//Condition is met) {
       mouseX.enabled = false;
       mouseY.enabled = false;
    }
}
Apr 15 '12 at 07:45 AM Kleptomaniac
(comments are locked)
10|3000 characters needed characters left

You can use this script to lock and hide your cursor

Lock:

screen.lockCursor = true;

Hide:

screen.showCursor = false;

more ▼

answered May 04 at 10:51 PM

MonsterGamingHD gravatar image

MonsterGamingHD
6 1

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3457
x3327
x1948
x162

asked: Apr 13 '12 at 06:56 PM

Seen: 768 times

Last Updated: May 04 at 10:51 PM