Physics2D Optimize

Hi
I’m working on 2D shooting game, I’m having problem of performance.
I see the profiler, performance problem cause because of
Physics.UpdateBodies.
Physics2D.ColliderTransformChanged.
Physics2D.ColliderTransformPositionRotationChanged.
Physics2D.PolygonColliderCreate.
Physics2D.ColliderCleanup.

How to optimize?

Here’s the code:
Bullet

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody2D))]
public class UbhNonKinematic2D : UbhMonoBehaviour
{
#if UNITY_4_3
    Vector3 _FixedPosition = Vector3.zero;
    float _OrgGravityScale;
#endif

    void Awake ()
    {
#if !UNITY_4_3
        rigidbody2D.isKinematic = true;
        enabled = false;
        return;
#else
        _FixedPosition = transform.localPosition;
#endif
    }

    void Update ()
    {
#if !UNITY_4_3
        enabled = false;
        return;
#else
        if (rigidbody2D == null) {
            return;
        }
        rigidbody2D.velocity = Vector3.zero;
        rigidbody2D.angularVelocity = 0;
        transform.localPosition = _FixedPosition;
#endif
    }

    void OnEnable ()
    {
#if !UNITY_4_3
        enabled = false;
        return;
#else
        if (rigidbody2D == null) {
            return;
        }
        _OrgGravityScale = rigidbody2D.gravityScale;
        rigidbody2D.gravityScale = 0f;
#endif
    }

    void OnDisable ()
    {
#if !UNITY_4_3
        return;
#else
        if (rigidbody2D == null) {
            return;
        }
        rigidbody2D.gravityScale = _OrgGravityScale;
#endif
    }
}

Enemy

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(UbhSpaceship))]
public class UbhEnemy : UbhMonoBehaviour
{
    public const string NAME_PLAYER = "Player";
    public const string NAME_PLAYER_BULLET = "PlayerBullet";
    const string ANIM_DAMAGE_TRIGGER = "Damage";
    [SerializeField]
    int _Hp = 1;
    [SerializeField]
    int _Point = 100;
    [SerializeField]
    bool _UseStop = false;
    [SerializeField]
    float _StopPoint = 2f;
    UbhSpaceship _Spaceship;

    void Start ()
    {
        _Spaceship = GetComponent<UbhSpaceship>();

        Move(transform.up.normalized * -1);
    }

    void FixedUpdate ()
    {
        if (_UseStop) {
            if (transform.position.y < _StopPoint) {
                rigidbody2D.velocity = Vector2.zero;
                _UseStop = false;
            }
        }
    }

    public void Move (Vector2 direction)
    {
        rigidbody2D.velocity = direction * _Spaceship._Speed;
    }

    void OnTriggerEnter2D (Collider2D c)
    {
        // *It is compared with name in order to separate as Asset from project settings.
        //  However, it is recommended to use Layer or Tag.
        if (c.name.Contains(NAME_PLAYER_BULLET)) {
            UbhSimpleBullet bullet = c.transform.parent.GetComponent<UbhSimpleBullet>();

            UbhObjectPool.Instance.ReleaseGameObject(c.transform.parent.gameObject);

            _Hp = _Hp - bullet._Power;

            if (_Hp <= 0) {
                FindObjectOfType<UbhScore>().AddPoint(_Point);

                _Spaceship.Explosion();

                Destroy(gameObject);
            } else {
                _Spaceship.GetAnimator().SetTrigger(ANIM_DAMAGE_TRIGGER);
            }
        }
    }
}