/// <summary> /// Y轴移动 /// </summary> /// <param name="newy">目标Y值</param> /// <param name="ease">移动方式</param> /// <param name="time">移动时间</param> void MoveYTo(float newy, Ease ease, float time = 0.3f) { var pos = m_ScrollObject.ScrollViewPosition; if (!QKMath.Equals(pos.y, newy)) { StopPosYTweener(); if (QKMath.Equals(time, 0)) { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.y = newy; m_ScrollObject.JumpTo(tmpPos); } else { m_posYTweener = DOTween.To( () => m_ScrollObject.ScrollViewPosition.y, (v) => { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.y = v; m_ScrollObject.JumpTo(tmpPos); }, newy, 0.3f ).SetAutoKill().SetEase(ease); } } }
/// <summary> /// 旋转角度 /// 摄像机角度视线按照x轴旋转 /// </summary> /// <param name="xRot">转动角度</param> /// <param name="ease">转动方式</param> /// <param name="time">转动时间</param> private void RotXTo(float xRot, Ease ease, float time = 0.3f) { var x = m_TransformMixer.MainRotationTransform.Value.eulerAngles.x; if (QKMath.Equals(xRot, x)) { return; //没有旋转的必要 } StopRotXTweener(); if (QKMath.Equals(time, 0)) { Vector3 tmpEuler = m_TransformMixer.MainRotationTransform.Value.eulerAngles; tmpEuler.x = xRot; m_TransformMixer.MainRotationTransform.Value = Quaternion.Euler(tmpEuler); } else { m_rotXTweener = DOTween.To( () => m_TransformMixer.MainRotationTransform.Value.eulerAngles.x, (rot_x) => { Vector3 tmpEuler = m_TransformMixer.MainRotationTransform.Value.eulerAngles; tmpEuler.x = rot_x; m_TransformMixer.MainRotationTransform.Value = Quaternion.Euler(tmpEuler); }, xRot, time ).SetAutoKill().SetEase(ease); } }
/// <summary> /// 顺滑操作Z轴位置 /// </summary> /// <param name="newV">目标X值</param> /// <param name="ease"></param> /// <param name="constant">是否在执行状态下修改newV并继续操作</param> /// <param name="time">执行时间</param> void ZOffsetTo(float newV, Ease ease, bool constant = false, float time = 0.3f) { StopZOffsetTweener(); if (QKMath.Equals(time, 0)) { m_CurrZOffset = newV; ApplyOffset(); } else { m_ZOffsetTweener = DOTween.To( () => m_CurrZOffset,//m_ScrollObject.ScrollViewPosition.x (v) => { m_CurrZOffset = v; ApplyOffset(); }, newV, time ).SetAutoKill().SetEase(ease); } }
/// <summary> /// 向目标移动 /// </summary> /// <param name="newpos">目标点</param> /// <param name="ease">移动方式</param> /// <param name="constant">持续移动(上次移动未结束时继续操作)</param> /// <param name="time">移动时间</param> void MoveTo(Vector3 newpos, Ease ease, bool constant = false, float time = 0.3f) { var pos = m_ScrollObject.ScrollViewPosition; if (!QKMath.Equals(pos.x, newpos.x)) { /* * if (constant && m_posXTweener != null && m_posXTweener.IsActive())//持续模式,且当前tweener仍然有效 * //m_posXTweener.ChangeValues(m_ScrollObject.ScrollViewPosition.x, newpos.x); * m_posXTweener.ChangeEndValue(newpos.x); * else*/ { StopPosXTweener(); if (QKMath.Equals(time, 0)) { //m_CurrXPos = newpos.x; //ApplyXPos(); Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.x = newpos.x; m_ScrollObject.JumpTo(tmpPos); } else { m_posXTweener = DOTween.To( () => m_ScrollObject.ScrollViewPosition.x,//m_ScrollObject.ScrollViewPosition.x (v) => { var tmp = m_ScrollObject.ScrollViewPosition; tmp.x = v; m_ScrollObject.JumpTo(tmp); //m_CurrXPos = v; //ApplyXPos(); }, newpos.x, time ).SetAutoKill().SetEase(ease); } } } if (!QKMath.Equals(pos.y, newpos.y)) { if (constant && m_posYTweener != null && m_posYTweener.IsActive())//持续模式,且当前tweener仍然有效 //m_posYTweener.ChangeValues(m_ScrollObject.ScrollViewPosition.y, newpos.y); { m_posYTweener.ChangeEndValue(newpos.y, true); } else { StopPosYTweener(); if (QKMath.Equals(time, 0)) { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.y = newpos.y; m_ScrollObject.JumpTo(tmpPos); } else { m_posYTweener = DOTween.To( () => m_ScrollObject.ScrollViewPosition.y, (v) => { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.y = v; m_ScrollObject.JumpTo(tmpPos); }, newpos.y, 0.3f ).SetAutoKill().SetEase(ease); } } } if (!QKMath.Equals(pos.z, newpos.z)) { if (constant && m_posZTweener != null && m_posZTweener.IsActive())//持续模式,且当前tweener仍然有效 //m_posYTweener.ChangeValues(m_ScrollObject.ScrollViewPosition.y, newpos.y); { m_posZTweener.ChangeEndValue(newpos.z, true); } else { StopPosZTweener(); if (QKMath.Equals(time, 0)) { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.z = newpos.z; m_ScrollObject.JumpTo(tmpPos); } else { m_posZTweener = DOTween.To( () => m_ScrollObject.ScrollViewPosition.z, (v) => { Vector3 tmpPos = m_ScrollObject.ScrollViewPosition; tmpPos.z = v; m_ScrollObject.JumpTo(tmpPos); }, newpos.z, 0.3f ).SetAutoKill().SetEase(ease); } } } }