My game isn't smooth, it runs at 60 fps but has quick lag spikes just under every second. I really can't figure out why. I have a feeling it's to do with my player movement code. Here is a sample of what it looks like. https://gfycat.com/cleanmeagerhuemul public ParticleSystem particleLauncher; public float playerSpeed; public float jumpSpeed; public float coolDownTime = 2; public CameraShake cameraShake; public bool dashEnabled; public bool isCamShakeEnabled; private bool isJumping; private float move; private Rigidbody2D rb; private bool facingRight; private float nextDashTime = 0; public bool movementAllowed; private Animator anim; // Start is called before the first frame update void Start() { isCamShakeEnabled = true; Scene currentScene = SceneManager.GetActiveScene(); string sceneName = currentScene.name; dashEnabled = true; anim = GetComponent<Animator>(); facingRight = true; rb = GetComponent<Rigidbody2D>(); } void FixedUpdate() { if(movementAllowed == true) if (Input.GetButtonDown("Jump") && !isJumping) { rb.AddForce(new Vector2(rb.velocity.x, jumpSpeed)); isJumping = true; } } // Update is called once per frame void Update() { Application.targetFrameRate = 60; if (movementAllowed == true) { move = Input.GetAxisRaw("Horizontal"); rb.velocity = new Vector2(move * playerSpeed, rb.velocity.y); if (isJumping == true) { anim.SetBool("isJumping", true); } if(isJumping == false) { anim.SetBool("isJumping", false); } Flip(move); if (move == 0) { anim.SetBool("isRunning", false); } else { anim.SetBool("isRunning", true); } if (Time.time > nextDashTime) { if (Input.GetButtonDown("Dash") && dashEnabled == true) { if(SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level4-2")) { nextDashTime = Time.time + coolDownTime; StartCoroutine("DashMove"); } else { nextDashTime = Time.time + coolDownTime; StartCoroutine("DashMove"); StartCoroutine(cameraShake.Shake(.10f, .3f)); } } } } if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName ("Level5-4")) { dashEnabled = false; isCamShakeEnabled = false; } if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level5-4")) { isCamShakeEnabled = false; } } void OnTriggerEnter2D(Collider2D collision) { if (collision.transform.CompareTag("killer")) gameObject.GetComponent<TrailRenderer>().enabled = false; } IEnumerator DashMove() { playerSpeed += 60; particleLauncher.Emit(30); yield return new WaitForSeconds(.07f); playerSpeed -= 60; } void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.CompareTag("Ground")) { isJumping = false; gameObject.GetComponent<TrailRenderer>().enabled = true; } if (other.gameObject.CompareTag("BK")) { isJumping = false; } if (other.gameObject.CompareTag("MGround")) { this.transform.parent = other.transform; isJumping = false; } if (other.gameObject.CompareTag("Mcircle")) { this.transform.parent = other.transform; isJumping = false; } } void OnCollisionExit2D(Collision2D other) { if (other.gameObject.CompareTag("MGround")) { this.transform.parent = null; isJumping = true; } if (other.gameObject.CompareTag("Mcircle")) { this.transform.parent = null; isJumping = true; } if (other.gameObject.CompareTag("Ground")) { isJumping = true; } if (other.gameObject.CompareTag("BK")) { isJumping = false; } } private void Flip(float move) { if (move > 0 && !facingRight || move < 0 && facingRight) { facingRight = !facingRight; Vector3 theScale = transform.localScale; theScale.x *= -1; transform.localScale = theScale; } }