コード例 #1
0
        private void DoCollisionChecks(List <JCollider> colliders, HashSet <JCollisionPair> completedCollisions)
        {
            var endOuter = colliders.Count - 1;
            var endInner = colliders.Count;

            for (int i = 0; i < endOuter; i++)
            {
                var colliderA = colliders[i];
                for (int j = i + 1; j < endInner; j++)
                {
                    var colliderB = colliders[j];

                    if (ShouldSkipCollisionCheck(colliderA, colliderB, completedCollisions))
                    {
                        continue;
                    }

                    enterStayExitManager.Add(new JCollisionPair(colliderA, colliderB));

                    if (colliderA.IsTrigger || colliderB.IsTrigger)
                    {
                        continue;
                    }

                    if (colliderA.IsStationary && colliderB.IsStationary)
                    {
                        continue;
                    }

                    var pushResult = JMeshOverlapPushUtil.CalculateMinimumPush(colliderA.meshFrame, colliderB.meshFrame);
                    HandlePushResult(pushResult, colliderA, colliderB);
                }
            }
        }
コード例 #2
0
        public void Calculate_minmumPushDistance_should_push_b_down_even_when_argument_order_is_reversed()
        {
            var meshA = JMeshPhysicsMeshes.squareMeshIdentity;
            var meshB = JMesh.FromMeshAndTransform(JMeshPhysicsMeshes.triangleMeshIdentity, Matrix4x4.Translate(new Vector3(0, 0, -0.5f)));

            var pushResult = JMeshOverlapPushUtil.CalculateMinimumPush(meshB, meshA);

            TestMethods.AreEqualIshOrOppositeIsh(new Vector3(-1, 0, 1).normalized, pushResult.Direction);
            TestMethods.AreEqualIsh(Mathf.Sin(45 * Mathf.Deg2Rad) / 2f, pushResult.Magnitude, TestMethods.VECTOR_DIFF);
        }
コード例 #3
0
        public void Calculate_minmumPushDistance_should_push_b_left()
        {
            var meshA = JMeshPhysicsMeshes.squareMeshIdentity;
            var meshB = JMesh.FromMeshAndTransform(JMeshPhysicsMeshes.triangleMeshIdentity, Matrix4x4.Translate(new Vector3(-0.8f, 0, 0.25f)));

            var pushResult = JMeshOverlapPushUtil.CalculateMinimumPush(meshA, meshB);

            TestMethods.AreEqualIshOrOppositeIsh(new Vector3(-1, 0, 0), pushResult.Direction);
            TestMethods.AreEqualIsh(0.2f, pushResult.Magnitude, TestMethods.VECTOR_DIFF);
        }