/// <summary> /// ����CG��ͷ�����ӿ� /// </summary> /// <param name="originalDis">ԭ�߶�</param> /// <param name="targetDis">Ŀ��߶�</param> /// <param name="orginalRx">��x����Ƕ�</param> /// <param name="targetRx"></param> /// <param name="orginalRy">��y����Ƕ�</param> /// <param name="targetRy"></param> /// <param name="originalPx">x������</param> /// <param name="targetPx"></param> /// <param name="length">ʱ�䳤�ȣ��룩</param> public void PlayCGAnim (float _originalDis, float _targetDis, float _orginalRx, float _targetRx, float _orginalRy, float _targetRy, float _originalPx, float _targetPx, float _length, Vector3 _targetPos, Transform _target = null, Action _onDone = null) { //Debug.Log("PlayCGAnim"); m_currentAnim = new CGAnim() { originalDis = _originalDis, targetDis = _targetDis, orginalRx = _orginalRx, targetRx = _targetRx, orginalRy = _orginalRy, targetRy = _targetRy, originalPx = _originalPx, targetPx = _targetPx, length = _length, startTime = Time.time, targetPos = _targetPos, target = _target, onDone = _onDone }; CurrentState = CG; }
private void DoPlayCGAnim() { if (m_currentAnim == null) { return; } float timeElapse = Time.time - m_currentAnim.startTime; if (timeElapse >= m_currentAnim.length || m_currentAnim.length == 0) { Action temp = m_currentAnim.onDone; CurrentState = NONE; m_currentAnim = null; if (temp != null) { temp(); } return; } transform.position = m_currentAnim.actualPos; float timeRate = timeElapse / m_currentAnim.length; float dis = Mathf.Lerp(m_currentAnim.originalDis, m_currentAnim.targetDis, timeRate); float rotationX = Mathf.Lerp(m_currentAnim.orginalRx, m_currentAnim.targetRx, timeRate); float rotationY = Mathf.Lerp(m_currentAnim.orginalRy, m_currentAnim.targetRy, timeRate); float dx = Mathf.Lerp(m_currentAnim.originalPx, m_currentAnim.targetPx, timeRate); transform.position -= Vector3.forward * dis; transform.LookAt(m_currentAnim.actualPos); transform.RotateAround(m_currentAnim.actualPos, new Vector3(1, 0, 0), rotationX); transform.RotateAround(m_currentAnim.actualPos, new Vector3(0, 1, 0), rotationY); transform.Translate(new Vector3(dx, 0, 0), Space.Self); }
private void DoPlayCGAnim() { if (m_currentAnim == null) return; float timeElapse = Time.time - m_currentAnim.startTime; if (timeElapse >= m_currentAnim.length || m_currentAnim.length == 0) { Action temp = m_currentAnim.onDone; CurrentState = NONE; m_currentAnim = null; if (temp != null) { temp(); } return; } transform.position = m_currentAnim.actualPos; float timeRate = timeElapse / m_currentAnim.length; float dis = Mathf.Lerp(m_currentAnim.originalDis, m_currentAnim.targetDis, timeRate); float rotationX = Mathf.Lerp(m_currentAnim.orginalRx, m_currentAnim.targetRx, timeRate); float rotationY = Mathf.Lerp(m_currentAnim.orginalRy, m_currentAnim.targetRy, timeRate); float dx = Mathf.Lerp(m_currentAnim.originalPx, m_currentAnim.targetPx, timeRate); transform.position -= Vector3.forward * dis; transform.LookAt(m_currentAnim.actualPos); transform.RotateAround(m_currentAnim.actualPos, new Vector3(1, 0, 0), rotationX); transform.RotateAround(m_currentAnim.actualPos, new Vector3(0, 1, 0), rotationY); transform.Translate(new Vector3(dx, 0, 0), Space.Self); }
/// <summary> /// 剧情CG镜头动画接口 /// </summary> /// <param name="originalDis">原高度</param> /// <param name="targetDis">目标高度</param> /// <param name="orginalRx">绕x方向角度</param> /// <param name="targetRx"></param> /// <param name="orginalRy">绕y方向角度</param> /// <param name="targetRy"></param> /// <param name="originalPx">x轴坐标</param> /// <param name="targetPx"></param> /// <param name="length">时间长度(秒)</param> public void PlayCGAnim (float _originalDis, float _targetDis, float _orginalRx, float _targetRx, float _orginalRy, float _targetRy, float _originalPx, float _targetPx, float _length, Vector3 _targetPos, Transform _target = null, Action _onDone = null) { Mogo.Util.LoggerHelper.Debug("PlayCGAnim"); m_currentAnim = new CGAnim() { originalDis = _originalDis, targetDis = _targetDis, orginalRx = _orginalRx, targetRx = _targetRx, orginalRy = _orginalRy, targetRy = _targetRy, originalPx = _originalPx, targetPx = _targetPx, length = _length, startTime = Time.time, targetPos = _targetPos, target = _target, onDone = _onDone }; CurrentState = CG; }