/////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// OnParticleCollision /// # Hhandle collisions /// </summary> /////////////////////////////////////////////////////////////////////////////////////////////////////// void OnParticleCollision(GameObject other) { //print ("other name: " + other.name); int safeLength = part.GetSafeCollisionEventSize(); if (collisionEvents.Length < safeLength) { collisionEvents = new ParticleCollisionEvent[safeLength]; } int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents); if (DecalInGameManager.DECAL_INGAME_MANAGER) { for (int i = 0; i < numCollisionEvents; i++) { if (timeBewteenDecals <= 0) { timeBewteenDecals = .5f; //print ("Create decal"); #if UNITY_5_0 GenericMeshDecal actualDecal = DecalInGameManager.DECAL_INGAME_MANAGER.CreateNewMeshDecal(decalMaterial, collisionEvents[i].collider.transform, collisionEvents[i].intersection, collisionEvents[i].normal, 4, Vector2.zero, false); #else GenericMeshDecal actualDecal = DecalInGameManager.DECAL_INGAME_MANAGER.CreateNewMeshDecal(decalMaterial, collisionEvents [i].colliderComponent.transform, collisionEvents [i].intersection, collisionEvents [i].normal, 4, Vector2.zero, false); #endif actualDecal.transform.localScale = decalScale * actualDecal.transform.localScale; actualDecal.SetDestroyable(true, 2, 0.2f); } } } }
/////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// CreateDecal /// # Create a decal for a collision /// </summary> /////////////////////////////////////////////////////////////////////////////////////////////////////// void CreateDecal(Collision col) { if (counterBetweenDecalCreations <= 0) { counterBetweenDecalCreations = timeBetweenDecalCreations; int numberOfCreatedDecals = 0; foreach (ContactPoint contact in col.contacts) { float actualScaleMultiplier = Random.Range(scaleMultiplierRange.x, scaleMultiplierRange.y); if (!contact.otherCollider.gameObject.GetComponent <NotStainableObject> ()) { if (DecalInGameManager.DECAL_INGAME_MANAGER) { GenericMeshDecal actualDecal = DecalInGameManager.DECAL_INGAME_MANAGER.CreateNewMeshDecal(decalMaterial, contact.otherCollider.transform, contact.point, contact.normal, actualScaleMultiplier, rotationRange, false); actualDecal.SetDestroyable(true, destroyTime, destroySpeed); numberOfCreatedDecals++; } } if (numberOfCreatedDecals >= maxDecalsCreatedPerCollision) { break; } } } }