//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// namespace BansheeEngine { /** @addtogroup Physics * @{ */ /// /// A collider represented by an arbitrary mesh. /// public sealed class MeshCollider : Collider { [SerializeField] private PhysicsMesh mesh; /// /// Mesh that represents the collider geometry. This can be a generic triangle mesh, or and convex mesh. Triangle /// meshes are not supported as triggers, nor are they supported for colliders that are parts of a non-kinematic /// rigidbody. /// public PhysicsMesh Mesh { get { return mesh; } set { if (mesh == value) return; if (IsTrigger && mesh.MeshType == PhysicsMeshType.Triangle) { Debug.LogWarning("Triangle meshes are not supported on Trigger colliders."); return; } mesh = value; if (Native != null) { Native.Mesh = value; if (parent != null) { // If triangle mesh its possible the parent can no longer use this collider (they're not supported for // non-kinematic rigidbodies) if (mesh != null && mesh.MeshType == PhysicsMeshType.Triangle) UpdateParentRigidbody(); else parent.UpdateMassDistribution(); } } } } /// protected internal override bool IsValidParent(Rigidbody parent) { // Triangle mesh colliders cannot be used for non-kinematic rigidbodies return mesh == null|| mesh.MeshType == PhysicsMeshType.Convex || parent.Kinematic; } /// /// Returns the native mesh collider wrapped by this component. /// private NativeMeshCollider Native { get { return (NativeMeshCollider)native; } } /// internal override NativeCollider CreateCollider() { NativeMeshCollider meshCollider = new NativeMeshCollider(); meshCollider.Mesh = mesh; return meshCollider; } } /** @} */ }