Child object collision

I have a ship with multiple pieces of wood like a real ship. each piece has a collider and the same script:

    public void ApplyDamage(int damageTotal)
    {
        health -= damageTotal;
        Debug.Log("Damage " + damageTotal + " was applied");
        Destroy(gameObject);
    }

My goal is to check which piece got hit with a cannonball using send message or any other way. how do i get it to send message to the right piece.

Cannonball script:

void OnCollisionEnter(Collision hit)
      {
            Debug.Log("Collision Detected");
            if (hit.gameObject.tag == "ShipPlate")
            { 
                hit.gameObject.SendMessage("ApplyDamage", 5); // send the message to its owner
                Debug.Log("aaa");
                Destroy(gameObject);
            }
        }

You should raycast and then use its hit property to determine which object gets hit by raycast. Don’t use physics collisions, they probably cost more and most of the times are not accurate because of fixed update.

Also if it doesnt work correct, you possibly put script on wrong object (not pieces, on cannon).

@Madkrumper9 I wouldnt use else if I would just use if statements for all of them. Do you have colliders on each child gameobject or just the main ship?