private void InheritVelocity(Transform collideObject, ref Vector2 normalForce) { PhysicsHolder physics = collideObject.GetComponent <PhysicsHolder>(); if (physics == null) { return; } normalForce = normalForce.normalized * (normalForce.magnitude + Vector3.Project(physics.velocity, normalForce.normalized).magnitude); Vector2 forceInDirection = Vector3.ProjectOnPlane(velocity - physics.velocity, normalForce.normalized); Vector2 friction = -forceInDirection.normalized * normalForce.magnitude * physics.staticFriction; if (friction.magnitude > forceInDirection.magnitude) { friction = friction.normalized * forceInDirection.magnitude; } velocity += friction; }
public void ChangePhysics(bool value) { for (int i = 0; i < Bodies.Length; i++) { PhysicsHolder holder = Bodies[i]; if (holder.Collider) { holder.Collider.enabled = value; } if (holder.Joint) { holder.Joint.enableCollision = false; holder.Joint.enablePreprocessing = false; holder.Joint.enableProjection = value; } if (holder.Body) { holder.Body.isKinematic = !value; holder.Body.useGravity = value; } } }