// Update is called once per frame void Update() { collisions.Clear(); for (int i = 0; i < particles.Count; i++) { particles[i].ResetCollidingChecker(); particles[i].GetComponent <Renderer>().material.SetColor("_Color", Color.red); } // Iterate through all particles for (int x = 0; x < particles.Count; x++) { for (int y = 0; y < particles.Count; y++) { // If the one being checked equal to itself? if (x != y && (particles[x].transform.parent != particles[y].transform.parent || particles[x].transform.parent == null)) { CollisionPairKey3D key = new CollisionPairKey3D(particles[y].collisionType, particles[x].collisionType); CollisionInfo collision; if (particles[x].collisionType > particles[y].collisionType) { collision = _collisionTypeCollisionTestFunctions[key](particles[y], particles[x]); } else { collision = _collisionTypeCollisionTestFunctions[key](particles[x], particles[y]); } if (collision != null) { bool isDuplicate = false; for (int i = 0; i < collisions.Count; i++) { if ((collisions[i].a == particles[y] && collisions[i].b == particles[x]) || (collisions[i].a == particles[x] && collisions[i].b == particles[y])) { isDuplicate = true; } } if (!isDuplicate) { collision.a.GetComponent <Renderer>().material.SetColor("_Color", Color.green); collision.b.GetComponent <Renderer>().material.SetColor("_Color", Color.green); collisions.Add(collision); } } } } } //CollisionResolution.ResolveCollisions(collisions,Time.deltaTime); }
// Update is called once per frame void Update() { collisions.Clear(); for (int i = 0; i < particles.Count; i++) { if (particles[i] != null) { particles[i].ResetCollidingChecker(); particles[i].ResetColliding(); particles[i].GetComponent <Particle3D>().collidingGameObject = null; } } // Iterate through all particles for (int x = 0; x < particles.Count; x++) { for (int y = 0; y < particles.Count; y++) { if (particles[x] != null && particles[y] != null) { // If the one being checked equal to itself? if (x != y && (particles[x].transform.parent != particles[y].transform.parent || particles[x].transform.parent == null)) { CollisionPairKey3D key = new CollisionPairKey3D(particles[y].collisionType, particles[x].collisionType); CollisionInfo collision; if (particles[x].collisionType > particles[y].collisionType) { collision = _collisionTypeCollisionTestFunctions[key](particles[y], particles[x]); } else { collision = _collisionTypeCollisionTestFunctions[key](particles[x], particles[y]); } if (collision != null) { if ((collision.a.GetComponent <Particle3D>().isCharacterController&& !collision.a.GetComponent <Particle3D>().isUsingGravity) || (collision.b.GetComponent <Particle3D>().isCharacterController&& !collision.b.GetComponent <Particle3D>().isUsingGravity)) { } else { if (collision.a.GetComponent <WindZoneScript>() != null) { collision.b.GetComponent <Particle3D>().AddForce(collision.a.GetComponent <WindZoneScript>().force); } else if (collision.b.GetComponent <WindZoneScript>() != null) { collision.a.GetComponent <Particle3D>().AddForce(collision.b.GetComponent <WindZoneScript>().force); } bool isDuplicate = false; for (int i = 0; i < collisions.Count; i++) { if ((collisions[i].a == particles[y] && collisions[i].b == particles[x]) || (collisions[i].a == particles[x] && collisions[i].b == particles[y])) { isDuplicate = true; } } if (!isDuplicate) { collisions.Add(collision); } } } } } } } CollisionResolution3D.ResolveCollisions(collisions, Time.deltaTime); }