MeshCollider.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. namespace BansheeEngine
  4. {
  5. /// <summary>
  6. /// A collider represented by an arbitrary mesh.
  7. /// </summary>
  8. public sealed class MeshCollider : Collider
  9. {
  10. [SerializeField]
  11. private PhysicsMesh mesh;
  12. /// <summary>
  13. /// Mesh that represents the collider geometry. This can be a generic triangle mesh, or and convex mesh. Triangle
  14. /// meshes are not supported as triggers, nor are they supported for colliders that are parts of a non-kinematic
  15. /// rigidbody.
  16. /// </summary>
  17. public PhysicsMesh Mesh
  18. {
  19. get { return mesh; }
  20. set
  21. {
  22. if (mesh == value)
  23. return;
  24. if (IsTrigger && mesh.MeshType == PhysicsMeshType.Triangle)
  25. {
  26. Debug.LogWarning("Triangle meshes are not supported on Trigger colliders.");
  27. return;
  28. }
  29. mesh = value;
  30. if (Native != null)
  31. {
  32. Native.Mesh = value;
  33. if (parent != null)
  34. {
  35. // If triangle mesh its possible the parent can no longer use this collider (they're not supported for
  36. // non-kinematic rigidbodies)
  37. if (mesh != null && mesh.MeshType == PhysicsMeshType.Triangle)
  38. UpdateParentRigidbody();
  39. else
  40. parent.UpdateMassDistribution();
  41. }
  42. }
  43. }
  44. }
  45. /// <inheritdoc/>
  46. protected internal override bool IsValidParent(Rigidbody parent)
  47. {
  48. // Triangle mesh colliders cannot be used for non-kinematic rigidbodies
  49. return mesh == null|| mesh.MeshType == PhysicsMeshType.Convex || parent.Kinematic;
  50. }
  51. /// <summary>
  52. /// Returns the native mesh collider wrapped by this component.
  53. /// </summary>
  54. private NativeMeshCollider Native
  55. {
  56. get { return (NativeMeshCollider)native; }
  57. }
  58. /// <inheritdoc/>
  59. internal override NativeCollider CreateCollider()
  60. {
  61. NativeMeshCollider meshCollider = new NativeMeshCollider();
  62. meshCollider.Mesh = mesh;
  63. return meshCollider;
  64. }
  65. }
  66. }