/// <summary>
    /// Invoke a camera effect by index. The feature camera list will be used to locate the actual camera setting: fov, rotation, etc.
    /// </summary>
    /// <param name="index"></param>
    private void StartCameraEffect(int index, EnumShakeEffect shakeEffect = EnumShakeEffect.none, bool forceHold = false)
    {
        SkillCamera cam = null;

        if (index >= 0)
        {
            cam = skillCameraList._skillCameraList [index];

            Debug.Log("Starting camera effect: " + index + " Name: " + cam.cameraName);

            _shakeCamera.StopShake();
            SetSkillCamera(cam, forceHold);
        }

        if (shakeEffect != EnumShakeEffect.none)
        {
            _shakeCamera.Shake(shakeEffect.ToString(), shakeEffect == EnumShakeEffect.shake3_loop ? -1f : 0.4f, 1.0f);
        }
    }
 /// <summary>
 /// start the camera effect by id, using the specified shake effect. If force to hold, the camera effect will ignore its lasting time
 /// and keep holding on the settings after fading in until StopCameraEffect() is called.
 /// </summary>
 /// <param name="effectID"></param>
 /// <param name="shakeEffect"></param>
 /// <param name="forceHold"></param>
 public void StartCameraEffect(EnumCameraEffect effectID, EnumShakeEffect shakeEffect = EnumShakeEffect.none, bool forceHold = false)
 {
     StartCameraEffect((int)effectID, shakeEffect, forceHold);
 }