private bool isShake; private int shakeFrame; private float mShakeA; private static CameraController mInstance; private Vector3 currentPos; private void Start() { mInstance = this; Application.targetFrameRate = 60; } public static void Shake() { mInstance.isShake = true; mInstance.shakeFrame = 30; mInstance.mShakeA = 0.25f; } private void Update() { if (Player.Instance == null) { return; } var playerPosition = Player.Instance.transform.position; currentPos.x = (1.0f - Mathf.Exp(-Time.deltaTime * 20)) .Lerp(transform.position.x, playerPosition.x); currentPos.y = (1.0f - Mathf.Exp(-Time.deltaTime * 20)) .Lerp(transform.position.y, playerPosition.y); currentPos.z = transform.position.z; if (isShake) { var shakeA = Mathf.Lerp(mShakeA, 0.0f, shakeFrame / 30.0f); transform.position = new Vector3(currentPos.x + Random.Range(-shakeA, shakeA), currentPos.y + Random.Range(-shakeA, shakeA), currentPos.z); shakeFrame--; if (shakeFrame <= 0) { isShake = false; } } else { transform.PositionX( (1.0f - Mathf.Exp(-Time.deltaTime * 20)) .Lerp(transform.position.x, playerPosition.x)); transform.PositionY( (1.0f - Mathf.Exp(-Time.deltaTime * 20)) .Lerp(transform.position.y, playerPosition.y)); } }