protected virtual void CreateProjectile() { //Create basic projectile GameObject newBullet; if (projectileData.hitscan) { newBullet = Instantiate(hitscanProjectilePrefab, projectileStartPos.position, Quaternion.identity); } else { newBullet = Instantiate(physicalProjectilePrefab, projectileStartPos.position, Quaternion.identity); } ProjectileBase projectile = newBullet.GetComponent <ProjectileBase>(); //Set general properties projectile.SetDirection(TrigUtilities.DegreesToVector(owner.GetPlayerMovement().GetPlayerAngle() + Random.Range(-accuracyDegreeOffsetRange, accuracyDegreeOffsetRange))); projectile.SetDamage(projectileData.damage); projectile.SetDamageForce(projectileData.damageForce); projectile.SetOwner(owner); projectile.SetCanHitOwner(projectileData.canHitOwner); projectile.SetColor(owner.GetColor().GetModifiedBrightness(3f)); projectile.SetBounces(projectileData.bounces); projectile.SetCauseExplosion(projectileData.causeExplosion); projectile.SetExplosionRadius(projectileData.explosionRadius); projectile.SetExplodeEveryBounce(projectileData.explodeEveryBounce); //Set properties depending on if it's hitscan or physical if (projectileData.hitscan) { SetHitscanProperties(newBullet); } else { SetPhysicalProperties(newBullet); } }