- Home /
Tutorial script problem
Hello,
First, I have to say that I'm new to both Unity (I use v3.5.5) and to Unityscript. Recently, I have been following a tutorial from Lynda.com and have been cruising along until a few hours ago. I was instructed to create a simple script used to control the cursor on the game screen. The script is supposed to freeze the game state when I press the "esc" key so that I can access the editor without manipulating the camera every time I alternate between the game screen and the editor. Pressing the "esc" key again is supposed to unfreeze the game state and so on. The process seems to work as intended until I save both the scene and project and reload the project in Unity. Suddenly, the freeze/unfreeze process no longer works. Instead, the cursor freezes when I press the "esc" key and then stays frozen. Pressing the "esc" again has no effect. The game state stays frozen until I exit game screen and back into the editor. I've never posted a script before, but I'm going to try to post two scripts here and explain the process in hopes that someone can explain what is going wrong.
I have a game object in the hierarchy called, "First Person Controller" and another called, "Game Manager." They work together to manipulate the mess I've created. Attached to the "First Person Controller" is this script:
[code]private var motor : CharacterMotor;
internal var noInput : boolean;
// Use this for initialization function Awake () { motor = GetComponent(CharacterMotor); }
// Update is called once per frame function Update () {
if (noInput) Input.ResetInputAxes ();
// Get the input vector from keyboard or analog stick var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
if (directionVector != Vector3.zero) { // Get the length of the directon vector and then normalize it // Dividing by the length is cheaper than normalizing when we already have the length anyway var directionLength = directionVector.magnitude; directionVector = directionVector / directionLength;
// Make sure the length is no bigger than 1 directionLength = Mathf.Min(1, directionLength);
// Make the input vector more sensitive towards the extremes and less sensitive in the middle // This makes it easier to control slow speeds when using analog sticks directionLength = directionLength * directionLength;
// Multiply the normalized direction vector by the modified length directionVector = directionVector * directionLength; }
// Apply the direction to the CharacterMotor motor.inputMoveDirection = transform.rotation * directionVector; motor.inputJump = Input.GetButton("Jump"); }
function ToggleInput (state : boolean) { noInput = state; }
// Require a character controller to be attached to the same game object @script RequireComponent (CharacterMotor) @script AddComponentMenu ("Character/FPS Input Controller")[/code]
-------------------Then, attached to the "Game Manager" is this script:----------------------
[code]#pragma strict
var fpc : GameObject;
function Start () {
//hide cursor //Screen.showCursor = false;
}
function Update () { if (Input.GetKeyDown ("escape")) { if (Screen.showCursor == false) { fpc.SendMessage("ToggleInput", true); Screen.showCursor = true; } else { fpc.SendMessage("ToggleInput", false); Screen.showCursor = false; } } }[/code]
I've inserted the "First Person Controller" game object from the hierarchy to the "Fpc" variable in the inspector for the "Game Manager" script. This process is supposed to get the desired result. And, it does at first. Until I save all scripts, scenes, and projects and try to reload it all again. Then I get the mess I described. If I then un-attach all said scripts from objects and reassemble them, it all works fine again....until I save, exit, and reload again. I've been doing this for a few hours to try and sort it out, but to no avail. Can anyone help me here? Thanks in advance.
Answer by Cylon_Toast · Sep 02, 2012 at 03:35 AM
it looks like your code in the start function of game manager is // commented out. try erasing the // just before Screen.showCursor = false. thats what you need to get escape key free again. in most code lang common today a // will force compilers to ignore everything written after it on same line only. a little strange they even put that in the start function, that is only called up once per startup of application. I suggest looking elsewhere for understanding how to write code in unity, it does not 100% conform to pure c# or JS. Also unless coding for Iphone or android you can erase the #pragma strict line at the top of any script.