- Home /
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?
$$anonymous$$y guess is that you are using the First Person Controller
prefab from Standard Assets... correct?
@Lipis yes..not exactly the same but with the same configuration
Answer by Lipis · Mar 18, 2010 at 07:37 PM
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.
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?
Better to just toggle the enabled value; you can get rid of most of that code: "if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.Escape)) for (look in mouseLook) look.enabled = !look.enabled;" Also use "private var mouseLook : $$anonymous$$ouseLook[];" to avoid slow dynamic typing.
@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 $$anonymous$$ouseLook 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...
@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
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. DisableEnable$$anonymous$$ouseLook.Start () (at Assets\Scripts\DisableEnable$$anonymous$$ouseLook.js:5)
Answer by Simonced · May 06, 2011 at 02:07 AM
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 ;)
Answer by ariel-terrani · May 16, 2016 at 04:55 AM
in your Player Script: [CODE] public GameObject menu; public static bool menuActive; void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { menu.SetActive(!(Screen.lockCursor = !(menuActive = !menuActive))); return; } } void Start() { Screen.lockCursor = true; } [/CODE] In your Camera Script:
void Update()
{
if (!Player.menuActive)
{
//your stuff here
} }