Code Crashes Client? C#

Okay. So im brand new and super nooby. I did the usual cube FPS style. Then I added gui. Realizing the Gui couldn’t be interacted with i tried to add a new section to the normal look code.It would allow players to freeze camera movement. Now when I enter play mode it freezes unity!

using UnityEngine;
using System.Collections;

/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation

/// To make an FPS style character:
/// - Create a capsule.
/// - Add a rigid body to the capsule
/// - Add the MouseLook script to the capsule.
/// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSWalker script to the capsule

/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class look : MonoBehaviour {
	
	public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
	public RotationAxes axes = RotationAxes.MouseXAndY;
	public float sensitivityX = 15F;
	public float sensitivityY = 15F;
	
	public float minimumX = -360F;
	public float maximumX = 360F;
	
	public float minimumY = -60F;
	public float maximumY = 60F;
	
	float rotationX = 0F;
	float rotationY = 0F;
	
	Quaternion originalRotation;
	
	void Update ()
	{
					while (axes == RotationAxes.MouseXAndY && !Input.GetKeyDown("left shift")) 
					{
						// Read the mouse input axis
						rotationX += Input.GetAxis("Mouse X") * sensitivityX;
						rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
						
						rotationX = ClampAngle (rotationX, minimumX, maximumX);
						rotationY = ClampAngle (rotationY, minimumY, maximumY);
						
						Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
						Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, -Vector3.right);
						
						transform.localRotation = originalRotation * xQuaternion * yQuaternion;
					}
					while (axes == RotationAxes.MouseX && !Input.GetKeyDown("left shift"))
					{
						rotationX += Input.GetAxis("Mouse X") * sensitivityX;
						rotationX = ClampAngle (rotationX, minimumX, maximumX);
						
						Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
						transform.localRotation = originalRotation * xQuaternion;
					}
					while (axes == RotationAxes.MouseY && !Input.GetKeyDown("left shift"))
					{
						rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
						rotationY = ClampAngle (rotationY, minimumY, maximumY);
						
						Quaternion yQuaternion = Quaternion.AngleAxis (-rotationY, Vector3.right);
						transform.localRotation = originalRotation * yQuaternion;
					}

			}
	
	void Start ()
	{
		// Make the rigid body not change rotation
		if (rigidbody)
			rigidbody.freezeRotation = true;
		originalRotation = transform.localRotation;
	}
	
	public static float ClampAngle (float angle, float min, float max)
	{
		if (angle < -360F)
			angle += 360F;
		if (angle > 360F)
			angle -= 360F;
		return Mathf.Clamp (angle, min, max);
	}
}

so. My pc is decent enough. I7 Intel core. 4GB DDR3. GTX 660. What have I broken?

1 Answer

1

Most Likely it is getting stuck in a while loop. try replacing the while loops with

if(axes == RotationAxes.MouseXAndY && !Input.GetKey("left shift"))

that should let execution continue.

Yay. Thanks bud! That was awesome. It seems you have to use GetKey rather then GetKeyDown! Works as planned!

Ya GetKeyDown will only work once as its asking when the key press happened. GetKey is asking if the key is being pressed and works over any number of frames.