Question by
Reality-Gaming-Studio · Feb 07, 2016 at 11:10 AM ·
unity 5mobilephysics2d2d-physicsoptimize
Physics2D Optimize Physics.UpdateBodies.
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.
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);
}
}
}
}
How to optimize?
Comment
Your answer
Follow this Question
Related Questions
Physics2D Optimize 1 Answer
Object dragging on mobile slow and doesn't follow finger properly 0 Answers
How can I isolate just the character to slow down 0 Answers
Problem when build terrain on android device 0 Answers
Player can only jump once!? 0 Answers