It try to detect destroyed objects, like my collectibles
And some times is freezes and sometime it slowing down fps very much
How to decrease this effect or maybe unable it?
It very strange that is slowing down everything because its a 2d game and seems like FindObjectsOfType trying to find objects every frame
Please try to help!
Maybe it’s something on the script, but its not…
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.layer == LayerMask.NameToLayer ("food")) {
Destroy (col.gameObject);
score++;
}
here is the problem code
// ----------- MAIN UPDATE ----------- //
private void LateUpdate()
{
if (_meshFilter.sharedMesh == null) {
Rebuild ();
return;
}
// ------------- TYPE OF LIGHT ---------------------- //
if (light2DType != Light2DType.Dynamic && lastLight2DType != Light2DType.Dynamic)
staticScene = true;
else
staticScene = false;
if (light2DType == Light2DType.OnlySight && lastLight2DType != Light2DType.OnlySight) {
doNotRenderMesh = true;
useEvents = true;
Rebuild ();
}else if(light2DType != Light2DType.OnlySight)
doNotRenderMesh = false;
if (light2DType == Light2DType.OneFrame && Application.isPlaying)
StartCoroutine (deactivateItself (.2f));
lastLight2DType = light2DType;
//-----------------------------------------------------//
#if UNITY_EDITOR
//Adding listeners
if(permissionToAddListeners == true)
{
permissionToAddListeners = false;
AddListeners();
}
#endif
fixedLimitations();
//Sorting
if(_meshRenderer.sortingOrder != SortOrderID) _meshRenderer.sortingOrder = SortOrderID;
// Reaload _allMeshes when is in editor mode //
if(!Application.isPlaying){
GetCollidersOnScene();
_forceToRefresh = true;
}else{
if(staticScene == true){
// Only reload when is notificated
if(reloadMeshes == true){
GetCollidersOnScene();
reloadMeshes = false;
}
}else{
//GetCollidersOnScene();
GetCollidersOnSceneNonStatic();
}
}
//--------------------------------------------------
ColliderState anyColliderChange = DidAnyColliderTMChange();
if (anyColliderChange == ColliderState.HasBeenDeleted) {
reloadMeshes = true;
_forceToRefresh = true;
return;
}
if ((anyColliderChange != ColliderState.NoChanged) || (transform.position != _lastPos) || (transform.rotation != _lastRot) || (_forceToRefresh) || (LightRadius != _lastRadius))
{
// Restore force to reload all meshes //
_forceToRefresh = false;
_lastPos = transform.position;
_lastRot = transform.rotation;
_lastRadius = LightRadius;
// First check if any collider has been removed //
if (anyColliderChange == ColliderState.HasBeenDeleted)
{ reloadMeshes = true;
_forceToRefresh = true;
}
// since this is rather expensive let's chop it up
_allVerts.Clear();// Since these lists are populated every frame, clear them first to prevent overpopulation
// Reset List GameObjects touched by light
resetReachedEvent();
// Obtain vertices for each mesh
GenerateColliderVerts();
// Generate vectors for light mesh
GenerateLightVectors();
// Reorder the verts based on vector angle
SwapVertOrders(ref _allVerts);
// Render the final mesh wit allvert collected
RenderLightMesh();
// reset mesh bounds
ResetBounds();
}
}
private IEnumerator deactivateItself(float t){
yield return new WaitForSeconds (t);
GetComponent<DynamicLight> ().enabled = false;
}
private enum ColliderState{
NoChanged,
HasChanged,
HasBeenDeleted
}
/// <summary>
/// Checks if any of the colliders transformation has changed
/// </summary>
/// <returns>0=false</returns>
/// <returns>1=true</returns>
/// <returns>-1=killed</returns>
private ColliderState DidAnyColliderTMChange()
{
for (int i = 0; i < _colliders.Length; i++){
if(_colliders*.collider.transform == null)*
-
return ColliderState.HasBeenDeleted;*
if(colliders*.DidTransformDeleted)
_ return ColliderState.HasBeenDeleted; // has been deleted*
if (colliders*.DidTransformChange)*
* return ColliderState.HasChanged; // has been changed*_
* }*
* return ColliderState.NoChanged;*
* }*