Exemplo n.º 1
0
        protected static ColliderSliceResult PrepareSliceCollider(Vector3 locPos, Collider collider, Mesh mesh, Plane plane)
        {
            var                 result        = new ColliderSliceResult();
            IBzSliceAdapter     adapter       = new BzSliceColliderAdapter(mesh.vertices, collider.gameObject);
            BzMeshDataDissector meshDissector = new BzMeshDataDissector(mesh, plane, null, adapter, null);

            result.SliceResult      = SliceResult.Sliced;
            result.OriginalCollider = collider;
            result.meshDissector    = meshDissector;

            return(result);
        }
Exemplo n.º 2
0
        ColliderSliceResult[] SliceColliders(Plane plane)
        {
            var colliders = GetComponentsInChildren <Collider>();

            ColliderSliceResult[] results = new ColliderSliceResult[colliders.Length];
            bool ColliderExistsNeg        = false;
            bool ColliderExistsPos        = false;

            for (int i = 0; i < colliders.Length; i++)
            {
                var collider = colliders[i];

                var colliderB = collider as BoxCollider;
                var colliderS = collider as SphereCollider;
                var colliderC = collider as CapsuleCollider;
                var colliderM = collider as MeshCollider;

                ColliderSliceResult result;
                if (colliderB != null)
                {
                    var mesh = Cube.Create(colliderB.size, colliderB.center);
                    result = TrySliceCollider(colliderB.center, colliderB, mesh, plane);
                }
                else if (colliderS != null)
                {
                    var mesh = IcoSphere.Create(colliderS.radius, colliderS.center);
                    result = TrySliceCollider(colliderS.center, colliderS, mesh, plane);
                }
                else if (colliderC != null)
                {
                    var mesh = Capsule.Create(colliderC.radius, colliderC.height, colliderC.direction, colliderC.center);
                    result = TrySliceCollider(colliderC.center, colliderC, mesh, plane);
                }
                else if (colliderM != null)
                {
                    Mesh mesh = Instantiate(colliderM.sharedMesh);
                    result = TrySliceCollider(Vector3.zero, colliderM, mesh, plane);
                }
                else
                {
                    throw new NotSupportedException("Not supported collider type '" + collider.GetType().Name + "'");
                }

                ColliderExistsNeg |= result.SliceResult == SliceResult.Sliced | result.SliceResult == SliceResult.Neg;
                ColliderExistsPos |= result.SliceResult == SliceResult.Sliced | result.SliceResult == SliceResult.Pos;
                results[i]         = result;
            }

            bool sliced = ColliderExistsNeg & ColliderExistsPos;

            return(sliced ? results : null);
        }
Exemplo n.º 3
0
        private ColliderSliceResult TrySliceCollider(Vector3 locPos, Collider collider, Mesh mesh, Plane plane)
        {
            IBzSliceAddapter    adapter       = new BzSliceColliderAddapter(mesh.vertices, collider.gameObject);
            BzMeshDataDissector meshDissector = new BzMeshDataDissector(mesh, plane, null, adapter, null);

            ColliderSliceResult result = new ColliderSliceResult();

            result.OriginalCollider = collider;
            result.MeshDissector    = meshDissector;
            result.SliceResult      = meshDissector.Slice();

            return(result);
        }
Exemplo n.º 4
0
        protected static ColliderSliceResult PrepareSliceCollider(Collider collider, Mesh mesh, Plane plane)
        {
            var                   result        = new ColliderSliceResult();
            IBzSliceAdapter       adapter       = new BzSliceColliderAdapter(mesh.vertices, collider.gameObject);
            SliceConfigurationDto conf          = BzSliceConfiguration.GetDefault();
            BzMeshDataDissector   meshDissector = new BzMeshDataDissector(mesh, plane, null, adapter, conf);

            result.SliceResult      = SliceResult.Sliced;
            result.OriginalCollider = collider;
            result.meshDissector    = meshDissector;

            return(result);
        }
Exemplo n.º 5
0
        private static ColliderSliceResult[] SliceColliders(Plane plane, Collider[] colliders)
        {
            ColliderSliceResult[] results = new ColliderSliceResult[colliders.Length];
            bool ColliderExistsNeg        = false;
            bool ColliderExistsPos        = false;

            for (int i = 0; i < colliders.Length; i++)
            {
                var collider = colliders[i];

                var colliderB = collider as BoxCollider;
                var colliderS = collider as SphereCollider;
                var colliderC = collider as CapsuleCollider;
                var colliderM = collider as MeshCollider;

                ColliderSliceResult result;
                if (colliderB != null)
                {
                    var mesh = Cube.Create(colliderB.size, colliderB.center);
                    result = PrepareSliceCollider(collider, mesh, plane);
                }
                else if (colliderS != null)
                {
                    var mesh = IcoSphere.Create(colliderS.radius, colliderS.center);
                    result = PrepareSliceCollider(collider, mesh, plane);
                }
                else if (colliderC != null)
                {
                    var mesh = Capsule.Create(colliderC.radius, colliderC.height, colliderC.direction, colliderC.center);
                    result = PrepareSliceCollider(collider, mesh, plane);
                }
                else if (colliderM != null)
                {
                    Mesh mesh = UnityEngine.Object.Instantiate(colliderM.sharedMesh);
                    result = PrepareSliceCollider(collider, mesh, plane);
                }
                else
                {
                    throw new NotSupportedException("Not supported collider type '" + collider.GetType().Name + "'");
                }

                ColliderExistsNeg |= result.SliceResult == SliceResult.Sliced | result.SliceResult == SliceResult.Neg;
                ColliderExistsPos |= result.SliceResult == SliceResult.Sliced | result.SliceResult == SliceResult.Pos;
                results[i]         = result;
            }

            bool sliced = ColliderExistsNeg & ColliderExistsPos;

            return(sliced ? results : null);
        }