Access variables directly from objects?

I want to assign damage, mana drain, etc. etc. on impact to each object. So for instance, the player collides with a creature, and receives a “damage pack” from the creature object on collision that contains all of the values. Currently I’m using structs which I’m assigning in the creature scripts. then doing the following on collision in the players script:

private void OnTriggerEnter(Collider other) {
    if (other.gameObject.CompareTag("Life PU") || other.gameObject.CompareTag("Mana PU"))
    {
        PickupScript otherScript = other.gameObject.GetComponent<PickupScript>();
        playerLife += otherScript.dmgPack.life;
        playerMana += otherScript.dmgPack.mana;
        playerLight += otherScript.dmgPack.light;
        Destroy(other.gameObject);
        UpdateResources();
    }
}

I’d like to do something more like:

playerLife += other.dmgPack.life;

etc.

Without having to specify a variable and specifically assign it the script attached to the object. Isn’t there a way to add structs or classes directly to gameObjects? What’s the best way to pass variables such as damage etc. between game objects/scripts?

I as all developers faced same problems how best communicate between objects. Default solution to make in inspector reference in many cases bad because references to scene objects not saved in prefabs by design. After long search i found that one of best solution is use c# events but not in usual form, i found this blog that give event system that not need any references: A Type-Safe Event System for Unity3D

But before you try this solution you must first learn about C# events in general