void Shoot() { Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y); Vector2 shotDir = new Vector2(); if (Vector2.Distance(mousePosition, firePointPosition) > 0.5f) { shotDir = mousePosition - firePointPosition; } else { shotDir = firePoint.parent.up; } shotDir.Normalize(); shotDir.x += Random.Range(-PlayerStats.playerAimOffset, PlayerStats.playerAimOffset); shotDir.y += Random.Range(-PlayerStats.playerAimOffset, PlayerStats.playerAimOffset); shotDir.Normalize(); RaycastHit2D hit = Physics2D.Raycast(firePointPosition, shotDir, 100, whatToHit); if (Time.time >= timeToSpawnEffect) { if (hit.collider != null) { Effect(hit); } else { Effect(new Vector3(shotDir.x, shotDir.y, 0)); } timeToSpawnEffect = Time.time + 1 / effectSpawnRate; } Debug.DrawLine(firePointPosition, shotDir * 100, Color.cyan); if (hit.collider != null) { Debug.DrawLine(firePointPosition, hit.point, Color.red); //Debug.Log ("We hit " + hit.collider.name + " and did " + damage + " damage."); if (hit.collider.tag == "Enemy") { EnemyMaster em = hit.collider.GetComponent <EnemyMaster>(); em.AdjustHealth(DoDamageCalculation()); hit.collider.GetComponent <Rigidbody2D>().AddForce(transform.up * enemyKnockBack, ForceMode2D.Impulse); } } rb.AddRelativeForce(-transform.up * knockBack, fMode); }