示例#1
0
    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);
    }
示例#2
0
    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);
        }
    }