internal void RegisterCamera( AmplifyMotionCamera camera )
	{
		Camera actual = camera.GetComponent<Camera>();
		if ( ( actual.cullingMask & ( 1 << gameObject.layer ) ) != 0 && !m_states.ContainsKey( actual ) )
		{
			AmplifyMotion.MotionState state = null;
			switch ( m_type )
			{
				case AmplifyMotion.ObjectType.Solid:
					state = new AmplifyMotion.SolidState( camera, this ); break;
				case AmplifyMotion.ObjectType.Skinned:
					state = new AmplifyMotion.SkinnedState( camera, this );	break;
				case AmplifyMotion.ObjectType.Cloth:
					state = new AmplifyMotion.ClothState( camera, this ); break;
			#if !UNITY_PRE_5_3
				case AmplifyMotion.ObjectType.Particle:
					state = new AmplifyMotion.ParticleState( camera, this ); break;
			#endif
				default:
					throw new Exception( "[AmplifyMotion] Invalid object type." );
			}

			camera.RegisterObject( this );

			m_states.Add( actual, state );
		}
	}
	internal void RegisterCamera( AmplifyMotionCamera camera )
	{
		Camera actual = camera.GetComponent<Camera>();
		if ( ( actual.cullingMask & ( 1 << gameObject.layer ) ) != 0 && !m_states.ContainsKey( actual ) )
		{
			MotionState state =null;
			switch ( m_type )
			{
				case AmplifyMotionObjectType.Solid:
					state = new AmplifyMotion.SolidState( camera, this ); break;
				case AmplifyMotionObjectType.Skinned:
					state = new AmplifyMotion.SkinnedState( camera, this );	break;
			#if UNITY_3 || UNITY_4
				case AmplifyMotionObjectType.Cloth:
					state = new AmplifyMotion.ClothState( camera, this ); break;
			#endif
				default:
					throw new Exception( "[AmplifyMotion] Invalid object type." );
			}

			m_fixedStep = false;
		#if UNITY_3 || UNITY_4
			if ( m_type == AmplifyMotionObjectType.Cloth )
				m_fixedStep = true;
			else if ( m_type == AmplifyMotionObjectType.Solid )
		#else
			if ( m_type == AmplifyMotionObjectType.Solid )
		#endif
			{
				Rigidbody rb = GetComponent<Rigidbody>();
				if ( rb != null && rb.interpolation == RigidbodyInterpolation.None )
					m_fixedStep = true;
			}

			camera.RegisterObject( this );

			m_states.Add( actual, state );
		}		
	}