static public void Cancel(FNode node) { ShakeUtil obj = null; _pendings.TryGetValue(node, out obj); if (obj != null) { obj.Stop(); } }
/// <summary> /// 每次lateupadate的摄像机光效更新 /// </summary> public void UpdateEffect(float deltaTime) { this.deltaTime = deltaTime; uint tick = GameLogicAPI.getTickCount(); if (camCtrl == null) { return; } if (tick < m_effectStartTick) { return; } if (tick >= m_effectStopTick) { stopEffect(); return; } if (tick >= m_nextEffectNodeTick) { m_effectDisSpeed = 0.0f; m_effectTranSpeed = Vector3.zero; m_effectDirSpeed = Vector3.zero; m_effectAngleSpeed = Vector2.zero; m_effectFovSpeed = 0.0f; m_effectPosSpeed = Vector3.zero; if (m_nCameraAxisIndex < m_cameraAxis.Length - 1) { m_nCameraAxisIndex += 1; m_nextEffectNodeTick = m_effectStartTick + (uint)m_cameraAxis[m_nCameraAxisIndex].tick; Effect_CameraNode currentNode = m_cameraAxis[m_nCameraAxisIndex]; canPlayControl = currentNode.playerControl; //if (currentNode.playerControl) //{ // cameraMode = CameraControlMode.UserAndEffectControl; //} //else //{ // cameraMode = CameraControlMode.EffectControl; //} if (m_nextEffectNodeTick <= tick) { m_nextEffectNodeTick = tick + 1; } float effectTime = (m_nextEffectNodeTick - tick) / 1000.0f; //位置 m_effectLockPos = currentNode.lockPosition; Vector3 pos = currentNode.pos - m_effectCurPos; m_effectPosSpeed = pos / effectTime; m_effectDesirePos = currentNode.pos; //fov m_effectLockFov = currentNode.lockFov; float fov = currentNode.fov - m_effectCurFov; m_effectFovSpeed = fov / effectTime; m_effectDesireFov = currentNode.fov; //距离 m_effectLockDistance = currentNode.lockDistance; float dis = currentNode.distance - m_effectCurDistance; m_effectDisSpeed = dis / effectTime; m_effectDesireDistance = currentNode.distance; //平移 m_effectLockTran = currentNode.lockTran; Vector3 tran = currentNode.tran - m_effectCurTran; m_effectTranSpeed = tran / effectTime; m_effectDesireTran = currentNode.tran; //偏移方向 m_effectLockDir = currentNode.lockDir; Vector3 dir = currentNode.dir - m_effectCurDir; m_effectDirSpeed = dir / effectTime; m_effectDesireDir = currentNode.dir; //角度 m_effectLockAngle = currentNode.lockAngle; Vector3 angleDis = currentNode.angle - m_effectCurAngle; m_effectAngleSpeed = angleDis / effectTime; m_effectDesireAngle = currentNode.angle; if (currentNode.shakeCamera == true) { CameraShakeContext shakeContext = new CameraShakeContext(); shakeContext.minShakeSpeed = currentNode.shakeParam.minShakeSpeed; shakeContext.maxShakeSpeed = currentNode.shakeParam.maxShakeSpeed; shakeContext.minShake = currentNode.shakeParam.minShake; shakeContext.maxShake = currentNode.shakeParam.maxShake; shakeContext.minShakeTimes = currentNode.shakeParam.minShakeTimes; shakeContext.maxShakeTimes = currentNode.shakeParam.maxShakeTimes; shakeContext.maxShakeFov = currentNode.shakeParam.maxShakeFov; shakeContext.minShakeFov = currentNode.shakeParam.minShakeFov; shakeContext.shakeFovSpeed = currentNode.shakeParam.shakeFovSpeed; shakeContext.shakeDir = currentNode.shakeParam.shakeDir; shakeContext.isDirDependRole = currentNode.shakeParam.isDependRole; shakeContext.isRandom = currentNode.shakeParam.isRandom; int rand = UnityEngine.Random.Range(0, 99); shakeContext.maxShakeDistance = 100.0f / ((float)rand); ShakeUtil.Init(shakeContext, this); ShakeUtil.StartShake(1.0f); } } else { if (m_recoverTransform) { //所有镜头动作已经做完,最后到StopTick这段时间内开始逐渐恢复镜头 //m_effectPlayerControl = true; m_nextEffectNodeTick = m_effectStopTick; float fEffectTime = (m_effectStopTick - tick) / 1000.0f; m_effectDisSpeed = -m_effectCurDistance / fEffectTime; m_effectTranSpeed = -m_effectCurTran / fEffectTime; m_effectDirSpeed = -m_effectCurDir / fEffectTime; m_effectFovSpeed = -m_effectCurFov / fEffectTime; m_effectAngleSpeed = -m_effectCurAngle / fEffectTime; m_effectPosSpeed = -m_effectCurPos / fEffectTime; m_effectDesireDistance = 0.0f; m_effectDesireFov = 0.0f; m_effectDesireTran = Vector3.zero; m_effectDesireDir = Vector3.zero; m_effectDesireAngle = Vector3.zero; m_effectDesirePos = Vector3.zero; ShakeUtil.shake = false; } else { if (m_remainAngle) { soldierCam.m_userDesireAngle += m_effectCurAngle; } if (m_remainDistance) { soldierCam.m_userCurDistance += soldierCam.m_userCurDistance; } if (m_remainFOV) { soldierCam.m_userDesireFov = soldierCam.m_userCurFov; } if (m_remainPosition) { soldierCam.m_userDesirePos = soldierCam.m_userCurPos; } if (m_remainDirection) { soldierCam.m_userDesireDir = soldierCam.m_userCurDir; } if (m_remainTran) { soldierCam.m_userDesireTran = soldierCam.m_userCurTran; } stopEffect(); return; } } } CameraUtil.advanceValue(ref m_effectCurFov, m_effectDesireFov, m_effectFovSpeed * deltaTime); CameraUtil.advanceValue(ref m_effectCurDistance, m_effectDesireDistance, m_effectDisSpeed * deltaTime); CameraUtil.advanceVec(ref m_effectCurPos, m_effectDesirePos, m_effectPosSpeed * deltaTime); CameraUtil.advanceVec(ref m_effectCurTran, m_effectDesireTran, m_effectTranSpeed * deltaTime); CameraUtil.advanceVec(ref m_effectCurDir, m_effectDesireDir, m_effectDirSpeed * deltaTime); CameraUtil.advanceVec(ref m_effectCurAngle, m_effectDesireAngle, m_effectAngleSpeed * deltaTime); }
public void ScreenShake(int time, int amplitude) { ShakeUtil.Go(this, time, amplitude); }