Problems with OnTriggerEnter function

Hey, so, in my game I have an object that instantiates 4 different gameObjects at the same time. OnTriggerEnter requires rigidbody I think, so I first putted a rigidbody on those 4 instantiated gameObjects, it was working, but the performance was just terrible, I would lose like 40 fps when they were instantaited. (then it would go back to normal, but that’s annoying for the players), So I’ve decided to put a rigidbody on the other gameObjects instead, idk why, but now it’s not working :(, it only finds the player (player is a rigidbody capsule)

this is my instantiated objeccts script:

#pragma strict

var lifeTime : float = 0.5;
var damage : int = 1;

function Update ()
{
	lifeTime -= Time.deltaTime *1;
	
	if (lifeTime <= 0)
	Destroy (gameObject);
}

function OnTriggerEnter (other : Collider)
{
	print(other.collider.tag);
	other.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}

The print is only working for my player now, but when the instantiated objects had the rigidbody instead it was working for all of the objects.

Maybe important information add-on: The rigidbodies that I added are kinematic, but I think so were the one on that I added to the instantiated gameObjects

my bomb instantiating script: #pragma strictvar timer : float = 3;var hasExploded : boolean = false; - Pastebin.com

Remove kinematic from gamobjects and if you want to stop them from moving use rigidbody Constraints.

Also check this out: Rigidbody-is kinematic

A moving trigger must have a rigidbody (even a kinematic one) in order to generate OnTrigger events. Anyway, this isn’t what is causing the performance hiccup: the culprit probably is Instantiate - instantiating an object is a heavy operation, and frequently causes these hiccups. The best way to avoid this is to create the objects previously in the Editor (or at Start) and deactivate them; when needed, just activate the objects.

If the four objects are created only once, child them to its creator in the Editor and set them inactive (clear the check box at the left of the object name in the Inspector). When needed, use SetActive(true) to make them appear with a code like this (in the creator script):

function CreateObjs(){
  for (var child: Transform in transform){
    child.gameObject.SetActive(true);
  }
}

But if the same creator may instantiate the four objects several times, an object pool for each different object is more suitable: take a look at this answer, where a simple object pool is implemented.