private void UpdateUnitRotate( Vector3 direction )
	{
		if ( State != PounceStates.Rotating ) return;

		// Reset on all but yaw axis
		transform.eulerAngles = new Vector3( 0, transform.eulerAngles.y, 0 );

		// Rotate towards the victim player
		if ( GetComponent<Rigidbody>().angularVelocity.magnitude < 0.001f )
		{
			GetComponent<Rigidbody>().isKinematic = true;

			Vector3 lookdirection = Vector3.RotateTowards( transform.forward, direction, Time.deltaTime * LerpSpeed / 2.0f, 0.0F );
			transform.rotation = Quaternion.LookRotation( lookdirection );

			float distance = Vector3.Distance( transform.forward, direction );
			if ( distance < 0.1f )
			{
				State = PounceStates.ChargingUp;
				StartPouncePosition = transform.localPosition;
            }
		}
	}
	private void UpdateUnitChargeUp( Vector3 direction )
	{
		if ( State != PounceStates.ChargingUp ) return;

		bool close = false;

		// Eyes widen
		for ( int eye = 0; eye < 2; eye++ )
		{
			Eyes[eye].transform.localScale = Vector3.Lerp(
				Eyes[eye].transform.localScale,
				DefaultEyeScale * EyeChargeAffect,
				Time.deltaTime * ChargeUpRate
			);
			if ( Vector3.Distance( Eyes[eye].transform.localScale, DefaultEyeScale * EyeChargeAffect ) < 0.1f )
			{
				close = true;
            }
		}
		// Mouth widen
		int multiplier = 1;
        for ( int jaw = 0; jaw < 2; jaw++ )
		{
			Jaws[jaw].transform.rotation = Quaternion.Lerp(
				Jaws[jaw].transform.rotation,
				DefaultJawOffset[jaw] * Quaternion.Euler( Jaws[jaw].transform.forward * JawChargeAffect * multiplier ),
				Time.deltaTime * ChargeUpRate
			);
			multiplier = 1;
        }
		// Shake violently
		transform.localPosition += new Vector3( Random.Range( -0.01f, 0.01f ), 0, Random.Range( -0.01f, 0.01f ) );

		// Move to attacking
		if ( close )
		{
			State = PounceStates.Attacking;
			// Reset position after shaking
			transform.localPosition = StartPouncePosition;
		}
	}