/// <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); } }
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; } }