private static unsafe bool IsTrigger(NativeArray <RigidBody> bodies, int rigidBodyIndex, ColliderKey colliderKey) { RigidBody hitBody = bodies[rigidBodyIndex]; hitBody.Collider.Value.GetLeaf(colliderKey, out ChildCollider leafCollider); Unity.Physics.Material material = UnsafeUtility.AsRef <ConvexColliderHeader>(leafCollider.Collider).Material; return(material.CollisionResponse == CollisionResponsePolicy.RaiseTriggerEvents); }
internal override void OnBeforeInstantiatePrefab(BouncySpawnSettings spawnSettings) { base.OnBeforeInstantiatePrefab(spawnSettings); var component = EntityManager.GetComponentData <PhysicsCollider>(spawnSettings.Prefab); unsafe { var oldCollider = component.ColliderPtr; var newCollider = (Collider *)UnsafeUtility.Malloc(oldCollider->MemorySize, 16, Allocator.Temp); UnsafeUtility.MemCpy(newCollider, oldCollider, oldCollider->MemorySize); var material = ((ConvexColliderHeader *)newCollider)->Material; material.Restitution = spawnSettings.Restitution; ((ConvexColliderHeader *)newCollider)->Material = material; Assert.IsTrue(oldCollider->MemorySize == newCollider->MemorySize, "Error when cloning Collider!"); TweakedCollider = BlobAssetReference <Collider> .Create(newCollider, newCollider->MemorySize); UnsafeUtility.Free(newCollider, Allocator.Temp); } }