| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | using UnityEngine;using UnityEngine.Playables;using Utility;namespace CombatLibrary.CombatLibrary.CombatCore.CustomizeTime.CameraShakingAsset{    public class CameraShakingBehaviour : PlayableBehaviour    {        public Camera Camera;        public ShakeDirection direction;        public int type;        public float totalTime;        public int count;        public float qiangDu;        public AnimationCurve AnimationCurve;        private float _effectTime;        private Vector3 _startPos;        private bool _inEffect;        private float cosAdd;        private float currCosTime;                public override void OnBehaviourPlay(Playable playable, FrameData info)        {            if (Camera == null)            {                return;            }            _startPos = Camera.transform.position;            _effectTime = 0;            _inEffect = true;            cosAdd = 360F*count / totalTime;            currCosTime = 0;        }        public override void ProcessFrame(Playable playable, FrameData info, object playerData)        {            if (Camera == null)            {                return;            }            ShakingPos(info.deltaTime);            // Debug.Log("ProcessFrame" + Mathf.Cos(271 * Mathf.Deg2Rad));        }        private void ShakingPos(float time)        {            if (!_inEffect)            {                return;            }            _effectTime += time;            currCosTime += time * cosAdd;            float value = Mathf.Cos((90 + currCosTime) * Mathf.Deg2Rad);            // Debug.Log(value);            float _strength = AnimationCurve.Evaluate(_effectTime / totalTime);            switch (direction)            {                case ShakeDirection.LeftRightUpDown:                    Camera.transform.position = _startPos + new Vector3(1,1,0)* value* _strength*qiangDu;                    break;                case ShakeDirection.LeftRight:                    Camera.transform.position = _startPos + new Vector3(1,0,0)* value* _strength*qiangDu;                    break;                case ShakeDirection.UpDown:                    Camera.transform.position = _startPos +  new Vector3(0,1,0)* value* _strength*qiangDu;                    break;                case ShakeDirection.FrontBack:                    Camera.transform.position = _startPos +  new Vector3(0,0,1)* value* _strength*qiangDu;                    break;            }            if (_effectTime > totalTime)            {                _inEffect = false;                Camera.transform.position = _startPos;            }        }    }}
 |