x


Locking/unlocking cursor

is it possible to disable the mouse look script applied to a camera?

The problems is that I have several GUI buttons that I need to use, but I'm using a FPS camera with the mouse look and cursor lock scripts applied to it.

I want to be able to unlock the cursor, use the GUI buttons and then lock the cursor again. While the cursor is unlocked I want the camera to stop moving with the movement of the mouse.

Any thoughts?

more ▼

asked Mar 18 '10 at 06:53 PM

maveryck21 gravatar image

maveryck21
239 29 32 44

My guess is that you are using the First Person Controller prefab from Standard Assets... correct?

Mar 18 '10 at 07:10 PM Lipis

@Lipis yes..not exactly the same but with the same configuration

Mar 18 '10 at 07:34 PM maveryck21
(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first

Since you are using the First Person Controller prefab, then you don't have the MouseLook component only on the Main Camera but also on the Player (to be able to turn). So you want to disable both of them in order stop the movement.

Here is an example on how you can disable/enable Mouse Look components of your player. Create a new Javascript, copy/paste this code to it and attach it to the First Person Controller.

private var mouseLook: MouseLook[];
private var canLook: boolean = true;

function Start() {
    mouseLook = gameObject.GetComponentsInChildren(MouseLook);
    Screen.lockCursor = true;
}

function Update () {
    if (Input.GetKeyDown(KeyCode.Escape)) {
        if (canLook) {
            disableMouseLook();
        } else {
            enableMouseLook();            
        }
    }
}

function enableMouseLook() {
    canLook = true;
    Screen.lockCursor = true;
    for (var look in mouseLook) {
        look.enabled = true;
    }
}

function disableMouseLook() {
    canLook = false;
    Screen.lockCursor = false;
    for (var look in mouseLook) {
        look.enabled = false;
    }
}

The above example disables and enables the Mouse Look when you are hitting the Esc key. Feel free to ask for more details in the comments if necessary.

more ▼

answered Mar 18 '10 at 07:37 PM

Lipis gravatar image

Lipis
2.3k 10 22 48

wow thats a lot..this is exactly what I was looking for..just one question..how can I lock the cursor when I activate the mouse look?

Mar 18 '10 at 08:01 PM maveryck21

Better to just toggle the enabled value; you can get rid of most of that code: "if (Input.GetKeyDown(KeyCode.Escape)) for (look in mouseLook) look.enabled = !look.enabled;" Also use "private var mouseLook : MouseLook[];" to avoid slow dynamic typing.

Mar 18 '10 at 08:02 PM Eric5h5

@maveryck21 I updated the code with the lockCursor included. @Eric5h5 I'm aware of that.. and I was thinking of doing that but toggling the the MouseLook but this will be only useful in this example with the Escape... Obviously maveryck21 would like to use it in a more complex way :) Hopefully...

Mar 18 '10 at 08:09 PM Lipis

@maveryck21 the web player is a different case especially with the Escape key... more details here: http://unity3d.com/support/documentation/ScriptReference/Screen-lockCursor.html

Mar 18 '10 at 08:42 PM Lipis

I got this message when I saved it ... it doesn't like the mouselook =game.Object... at line five ... any suggestions ? i have a set up with a far and near camera but i use the default scripts.
InvalidCastException: Cannot cast from source type to destination type. DisableEnableMouseLook.Start () (at AssetsScriptsDisableEnableMouseLook.js:5)

Mar 26 '10 at 05:31 PM alexnode
(comments are locked)
10|3000 characters needed characters left

@Simonced Maybe you have have find, but it can be useful for others... Try with another key than escape, for me, that works :)

more ▼

answered Apr 13 '12 at 05:08 AM

AVLead gravatar image

AVLead
1 1 1

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

Hi guys,

I found your solution and it helps me, but I still encounter an issue. I first had to change the beginning part of the script to :

private var mouseLook: Array = new Array();
private var canLook: boolean = true;

function Start() {

    for(var mouseScriptFound : MouseLook in gameObject.GetComponentsInChildren(MouseLook) ) {
        mouseLook.Add( mouseScriptFound );
    }

    Screen.lockCursor = true;
}

Then everything is ok, BUT, I have the same issue than when I tried my own script. One I hit Escape, the cursor unlocks and shows off, but if I hit ESC again, even if the mouseLook scripts are activated again, the mouse cursor still shows off.

I'm using Unity 3.3. Does anyone one know what's happening? Thanks for unlightning me ;)

more ▼

answered May 06 '11 at 02:07 AM

Simonced gravatar image

Simonced
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:

x3692
x25
x21

asked: Mar 18 '10 at 06:53 PM

Seen: 6119 times

Last Updated: Sep 27 '12 at 10:02 PM