Il y a moyen d'optimiser un peu ces lignes :
Code : Tout sélectionner
Vector3 dir = (transform.position - collision.gameObject.transform.position) * (Mathf.Pow((transform.position - collision.gameObject.transform.position).magnitude, 2) - transform.localScale.x);
collision.gameObject.GetComponent<Rigidbody2D>().AddForce(dir * force, ForceMode2D.Force);
Appeler transform tel quel revient à faire un GetComponent<Transform>(). (si ça n'a toujours pas été optimisé en interne)
Et GetComponent() est une fonction relativement lourde à l'exécution.
Il vaut mieux exécuter GetComponent() une seule fois à l'initialisation de ton script (assigné à chaque gameobject) et stocker le résultat dans une propriété de ton script.
Et ensuite tu n'utilises plus que cette propriété qui pointera directement vers le bon component, sans avoir à refaire un get à chaque fois.
Comme tu as beaucoup d'entités qui exécutent ce code, ça peut faire une différence...