Пример #1
0
        /// <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);
        }
Пример #2
0
 public void Init(CameraShakeContext contex, CameraEffectUtil effectUtil)
 {
     shakeContex   = contex;
     camEffectUtil = effectUtil;
 }