public override void Shoot() { if (nextShootTime > Time.time) { return; } nextShootTime = Time.time + reloadTime; Vector3 screenCenter = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2f, Screen.height / 2f, 0)); int layerMask = 1 << 8; Vector3 randomPoint; Vector3 rayDirection; RaycastHit[] hits; Ray ray; for (int i = 0; i < numberOfBulletsInACardridge; ++i) { //create the ray randomPoint = Random.insideUnitSphere * circularSpreadAt1M; rayDirection = Camera.main.transform.forward; rayDirection += randomPoint; ray = new Ray(screenCenter, rayDirection); //raycast hits = Physics.RaycastAll(ray, Mathf.Infinity, layerMask); // for (int rhi = 0; rhi < hits.Length; ++rhi) { Wall wall = hits[rhi].collider.gameObject.GetComponent <Wall>(); float distance = hits[rhi].distance; float xCurveDropoff = distance / destructionLvDropoffMaxRange; float destructionLvWithDropoff = destructionLevel * destructionLvDropoff.Evaluate(xCurveDropoff); wall.AddBulletHole(ray, destructionLvWithDropoff); } } audioSource.Play(); }