unity – Best practice where to store Projectile Damage amounts?

That “NPC script” looks like it’s all about managing health and damage. I’d be tempted to call it a Health component instead.

By separating the concept of having health and taking damage from being an NPC, you can re-use the same component on damageable player character or destructible objects too. 😀

Then your projectile can look like this:

public class bulletBehavior : MonoBehaviour
{
    private Rigidbody rb;
    public int damageAmount = 10;
    public float smallGunSpeed = 500f;

    void Start()
    {
        rb = this.GetComponent<Rigidbody>();
        // If you're going to call it "speed" then apply it as a speed
        // in meters per second, not a force in Newtons.
        rb.AddForce(transform.forward * smallGunSpeed, ForceMode.VelocityChange);
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.TryGetComponent(out Health health)) {
            health.TakeDamage(damageAmount);
            Destroy (gameObject);
        }            
    }   
}

Now the projectile knows about the Health component and damage-taking (kind of unavoidable – dealing damage is a projectile’s whole job), but things that have Health don’t need to know about all the (possibly many) things that can deal damage. We’ve simplified that relationship to just the simple contract of the TakeDamage method, (ie. “I’ll tell you how much damage to take”)

This way, we can easily add lots of different things that have health, and lots of different things that deal damage, without our trigger methods becoming a giant mess of different tag checks.