If button held 3 seconds do something

I’m trying to do a Crouch/Lay down system:

  1. Press C => crouch

  2. Hold C for 3 seconds => lay down

The logical way to do this seemed to be to use a timer:

        if (Input.GetButtonDown ("Crouch")) {
			print("Crouch");
			if (crouching)
				Stand();
			else
				Crouch();

			// Start Timer
			timer = new Timer(crouchDelay);
			timer.Elapsed += new ElapsedEventHandler(CrouchTimer);
			timer.Enabled = true;
		}
		else if (Input.GetButtonUp ("Crouch")) {
			timer.Enabled = false;
		}

But this isn’t working, getting timers to work in unity has proven to be a real pain the £$%. In this case the method CrouchTimer() is always called instantly, no matter what value crouchDelay has.

If you wanted to call a method ONLY if a key was held for 3 seconds, how would you do it?

It’s just a matter of logic :

public var timeToCrouch : float = 3.0;

var crouchTimer : float = 0;
var isCrouching : boolean = false;
var isProne : boolean = false;

function Update() 
{
	if ( Input.GetKeyDown(KeyCode.C) )
	{
		if ( isCrouching || isProne )
		{
			Stand();
		}
		else
		{
			Crouch();
		}
	}
	else if ( Input.GetKey(KeyCode.C) )
	{
		crouchTimer += Time.deltaTime;
		
		if ( isCrouching && crouchTimer > timeToCrouch )
		{
			Prone();
		}
	}
	else if ( Input.GetKeyUp(KeyCode.C) )
	{
		
	}
}

function Stand() 
{
	isCrouching = false;
	isProne = false;
}

function Crouch() 
{
	crouchTimer = 0;
	isCrouching = true;
	isProne = false;
}

function Prone() 
{
	isCrouching = false;
	isProne = true;
}