/// <summary>
    /// Stop the current camera effect by setting the elapsed time, can be used for restoring the default camera.
    /// </summary>
    public void StopCameraEffect()
    {
        //Debug.Log("Camera effect stopped. Camera restored to default.");

        _skillCamera = null;
        _forceHold   = false;
        _shakeCamera.StopShake();
    }
    /// <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);
        }
    }
Beispiel #3
0
    public int AddSkillCamera()
    {
        SkillCamera [] _newlist;
        if (_skillCameraList == null)
        {
            _newlist = new SkillCamera[1];
        }
        else
        {
            _newlist = new SkillCamera[_skillCameraList.Length + 1];
        }
        for (int i = 0; _skillCameraList != null && i < _skillCameraList.Length; ++i)
        {
            _newlist[i] = _skillCameraList[i];
        }

        _newlist[_newlist.Length - 1]            = new SkillCamera();
        _newlist[_newlist.Length - 1].cameraName = "NewSkillCamera";

        _skillCameraList = _newlist;

        return(_newlist.Length - 1);
    }
 private void SetSkillCamera(SkillCamera camera, bool forceHold)
 {
     _skillCamera = camera;
     _skillTime   = 0.0f;
     _forceHold   = forceHold;
 }
    void UpdateInternal(float deltaTime)
    {
#if UNITY_EDITOR
        _coreCamera.backgroundColor = RenderSettings.fogColor;
#endif

        Vector3 pos       = _previousPos;
        Vector3 focus     = _previousTargetPos;
        float   fov       = _currentCamera.fieldOfView + _currentCamera.fovFactorOnPhone * _fovFactor;
        Vector2 clipPlane = _currentCamera.clipPlanes;

        if (_oldCamera != null)
        {
            _currentCamera.UpdatePosAndRotation(_target, _target2, true, ref pos, ref focus);
            _timer += deltaTime;
            float   percent = Mathf.Min(_timer / _duration, 1.0f);
            Vector3 pos2    = _previousPos;
            Vector3 focus2  = _previousTargetPos;
            _oldCamera.UpdatePosAndRotation(_target, _target2, false, ref pos2, ref focus2);

            pos       = Vector3.Lerp(pos2, pos, percent);
            focus     = Vector3.Lerp(focus2, focus, percent);
            fov       = Mathf.Lerp(_oldCamera.fieldOfView + _oldCamera.fovFactorOnPhone * _fovFactor, fov, percent);
            clipPlane = Vector2.Lerp(_oldCamera.clipPlanes, clipPlane, percent);

            if (percent >= 1.0f)
            {
                _oldCamera = null;
                if (_callbackTarget != null)
                {
                    _callbackTarget.SendMessage(_callbackname);
                }
            }
        }
        else
        {
            _currentCamera.UpdatePosAndRotation(_target, _target2, true, ref pos, ref focus);
        }

        if (_skillCamera != null)
        {
            _skillTime += deltaTime;
            _skillCamera.Update(_skillTime, _skillCameraCache);

            if (_skillTime >= _skillCamera.duration && !_forceHold)
            {
                _skillCamera = null;
                _shakeCamera.StopShake();
            }
        }
        else
        {
            _skillCameraCache.SetParameter(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        }

        _previousPos       = pos;
        _previousTargetPos = focus;

        Vector3 originPos = pos - focus;

        Vector3 normalizeOriginPos = originPos.normalized;
        originPos += normalizeOriginPos * _skillCameraCache.distance;

        Vector3 virPos = Vector3.Cross(Vector3.left, Vector3.forward).normalized;
        originPos += virPos * _skillCameraCache.vertical;

        if (0 != _skillCameraCache.vertical)
        {
            Debug.Log(string.Format("originPos = {0}", originPos));
        }

        Vector3 horiPos = Vector3.Cross(Vector3.up, Vector3.forward).normalized;
        originPos += horiPos * _skillCameraCache.horizontal;

        Quaternion rot = Quaternion.AngleAxis(_skillCameraCache.verticalRotation, Vector3.Cross(Vector3.up, normalizeOriginPos));
        originPos = rot * originPos;
        rot       = Quaternion.AngleAxis(_skillCameraCache.horizontalRotation, Vector3.up);
        originPos = rot * originPos;
        pos       = originPos + focus;

        _transform.position = pos;
        _transform.LookAt(focus);

        _coreCamera.fieldOfView   = fov + _skillCameraCache.fieldOfView;
        _coreCamera.nearClipPlane = clipPlane.x;
        _coreCamera.farClipPlane  = clipPlane.y;

        // shadow camera update.
        if (_shadowCameraTransform != null)
        {
            _shadowCameraTransform.position = focus;
        }
    }