F3DShotgun.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using UnityEngine;
  2. using System.Collections;
  3. public class F3DShotgun : MonoBehaviour
  4. {
  5. #if UNITY_5_0
  6. private ParticleCollisionEvent[] collisionEvents = new ParticleCollisionEvent[16];
  7. private ParticleSystem ps;
  8. void Start()
  9. {
  10. ps = GetComponent<ParticleSystem>();
  11. }
  12. // On particle collision
  13. void OnParticleCollision(GameObject other)
  14. {
  15. int safeLength = ParticlePhysicsExtensions.GetSafeCollisionEventSize(ps);
  16. if (collisionEvents.Length < safeLength)
  17. collisionEvents = new ParticleCollisionEvent[safeLength];
  18. int numCollisionEvents = ParticlePhysicsExtensions.GetCollisionEvents(ps, other, collisionEvents);
  19. // Play collision sound and apply force to the rigidbody was hit
  20. int i = 0;
  21. while (i < numCollisionEvents)
  22. {
  23. F3DAudioController.instance.ShotGunHit(collisionEvents[i].intersection);
  24. Rigidbody rb = other.GetComponent<Rigidbody>();
  25. if (rb)
  26. {
  27. Vector3 pos = collisionEvents[i].intersection;
  28. Vector3 force = collisionEvents[i].velocity.normalized * 50f;
  29. rb.AddForceAtPosition(force, pos);
  30. }
  31. i++;
  32. }
  33. }
  34. #else
  35. // Particle collision events
  36. private ParticleCollisionEvent[] collisionEvents = new ParticleCollisionEvent[16];
  37. // On particle collision
  38. void OnParticleCollision(GameObject other)
  39. {
  40. int safeLength = GetComponent<ParticleSystem>().GetSafeCollisionEventSize();
  41. if (collisionEvents.Length < safeLength)
  42. collisionEvents = new ParticleCollisionEvent[safeLength];
  43. int numCollisionEvents = GetComponent<ParticleSystem>().GetCollisionEvents(other, collisionEvents);
  44. // Play collision sound and apply force to the rigidbody was hit
  45. int i = 0;
  46. while (i < numCollisionEvents)
  47. {
  48. F3DAudioController.instance.ShotGunHit(collisionEvents[i].intersection);
  49. if (other.GetComponent<Rigidbody>())
  50. {
  51. Vector3 pos = collisionEvents[i].intersection;
  52. Vector3 force = collisionEvents[i].velocity.normalized * 50f;
  53. other.GetComponent<Rigidbody>().AddForceAtPosition(force, pos);
  54. }
  55. i++;
  56. }
  57. }
  58. #endif
  59. }