private void PrepareNivose()
    {
        // _mOrigPosition = Globals.Instance.MSceneManager.mMainCamera.transform.position;
        // _mOrigEulerAngles = Globals.Instance.MSceneManager.mMainCamera.transform.rotation.eulerAngles;
        // _mOrigCullingMask = Globals.Instance.MSceneManager.mMainCamera.cullingMask;
        //
        // Globals.Instance.MSceneManager.mMainCamera.transform.position = _mSkillUser.U3DGameObject.transform.position + new Vector3(0.0f, 50.0f, -100.0f);
        // Globals.Instance.MSceneManager.mMainCamera.transform.LookAt(_mSkillUser.U3DGameObject.transform.position);

        int cullingMask = LayerMaskDefine.GetCullMaskEveryThing();

        cullingMask -= LayerMaskDefine.GetLayerCullMask(LayerMaskDefine.GUI);
        cullingMask -= LayerMaskDefine.GetLayerCullMask(LayerMaskDefine.NIVOSE_RENDER);
        Globals.Instance.MSceneManager.mMainCamera.cullingMask = cullingMask;

        // Duplicate a RTT camera
        GameObject cam = new GameObject();

        cam.name = "RttCamera";
        _mRTTCam = cam.AddComponent(typeof(Camera)) as Camera;
        _mRTTCam.CopyFrom(Globals.Instance.MSceneManager.mMainCamera);
        _mRTTCam.cullingMask    = LayerMaskDefine.GetLayerCullMask(LayerMaskDefine.NIVOSE_RENDER);
        _mRTTCam.clearFlags     = CameraClearFlags.Depth;
        _mRTTCam.depth          = Globals.Instance.MSceneManager.mMainCamera.depth + 2;
        _mRTTCam.gameObject.tag = TagMaskDefine.UNTAGGED;

        // A transparent plane
        CreateOcclusionPlane();
    }
    // Update is called once per frame
    public override void Update()
    {
        if (_mSkillIsEnd)
        {
            return;
        }

        _mCurrentTrackTime += Time.deltaTime;
        if (!_mIsFireParticleCreated)
        {
            CreateFireParticle();
        }

        if (null != _mRTTCam)
        {
            _mRTTCam.transform.position = Globals.Instance.MSceneManager.mMainCamera.transform.position;
            _mRTTCam.transform.rotation = Globals.Instance.MSceneManager.mMainCamera.transform.rotation;
        }

        switch (_mSkillState)
        {
        case SkillState.FIRE:
        {
            if (_mFireDuration <= 0.0f)
            {
                if (!_mIsFlyParticleCreated)
                {
                    CreateFlyParticle();
                }
            }
            _mFireDuration -= Time.deltaTime;

            break;
        }

        case SkillState.FLY:
        {
            if (null != _mRTTCam)
            {
                if (null != _mOcclusionPlane)
                {
                    GameObject.Destroy(_mOcclusionPlane);
                }
                _mOcclusionPlane = null;

                GameObject.Destroy(_mRTTCam.gameObject);
                _mRTTCam = null;

                int cullingMask = LayerMaskDefine.GetCullMaskEveryThing();
                cullingMask -= LayerMaskDefine.GetLayerCullMask(LayerMaskDefine.GUI);
                cullingMask -= LayerMaskDefine.GetLayerCullMask(LayerMaskDefine.NIVOSE_RENDER);
                Globals.Instance.MSceneManager.mMainCamera.cullingMask = cullingMask;
                LayerMaskDefine.SetLayerRecursively(_mSkillUser.U3DGameObject, LayerMaskDefine.DEFAULT);
            }
            break;
        }

        case SkillState.HIT_TARGET:
        {
            if (null != _mFollowTarget)
            {
                // iTween.MoveTo(Globals.Instance.MSceneManager.mMainCamera.gameObject, _mOrigPosition, 1.5f);
                // iTween.RotateTo(Globals.Instance.MSceneManager.mMainCamera.gameObject, _mOrigEulerAngles, 1.5f);
            }
            break;
        }

        case SkillState.END:
        {
            break;
        }
        }

        if (!CheckSkill())
        {
            return;
        }
    }