pyunity.physics.core module

Core classes of the PyUnity physics engine.

class pyunity.physics.core.AABBoxCollider[source]

Bases: pyunity.physics.core.Collider

An axis-aligned box collider that cannot be deformed.

min

The corner with the lowest coordinates.

Type:Vector3
max

The corner with the highest coordinates.

Type:Vector3
pos

The center of the AABBoxCollider

Type:Vector3
AddComponent(component)

Calls AddComponent on the component’s GameObject.

Parameters:component (Component) – Component to add. Must inherit from Component
CheckOverlap(other)[source]

Checks to see if the bounding box of two colliders overlap.

Parameters:other (Collider) – Other collider to check against
Returns:Whether they are overlapping or not
Return type:bool
GetComponent(component)

Calls GetComponent on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
GetComponents(component)

Calls GetComponents on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
RemoveComponent(component)

Calls RemoveComponent on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
RemoveComponents(component)

Calls RemoveComponents on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
SetSize(min, max)[source]

Sets the size of the collider.

Parameters:
  • min (Vector3) – The corner with the lowest coordinates.
  • max (Vector3) – The corner with the highest coordinates.
collidingWith(other)[source]

Check to see if the collider is colliding with another collider.

Parameters:other (Collider) – Other collider to check against
Returns:Collision data
Return type:Manifold or None

Notes

To check against another AABBoxCollider, the corners are checked to see if they are inside the other collider.

To check against a SphereCollider, the check is as follows:

  1. The sphere’s center is checked to see if it is inside the AABB.
  2. If it is, then the two are colliding.
  3. If it isn’t, then a copy of the position is clamped to the AABB’s bounds.
  4. Finally, the distance between the clamped position and the original position is measured.
  5. If the distance is bigger than the sphere’s radius, then the two are colliding.
  6. If not, then they aren’t colliding.
class pyunity.physics.core.CollManager[source]

Bases: object

Manages the collisions between all colliders.

rigidbodies

Dictionary of rigidbodies andthe colliders on the gameObject that the Rigidbody belongs to

Type:dict
dummyRigidbody

A dummy rigidbody used when a GameObject has colliders but no rigidbody. It has infinite mass

Type:Rigidbody
AddPhysicsInfo(scene)[source]

Get all colliders and rigidbodies from a specified scene. This overwrites the collider and rigidbody lists, and so can be called whenever a new collider or rigidbody is added or removed.

Parameters:scene (Scene) – Scene to search for physics info

Notes

This function will overwrite the pre-existing dictionary of rigidbodies. When there are colliders but no rigidbody is on the GameObject, then they are placed in the dictionary with a dummy Rigidbody that has infinite mass and a default physic material. Thus, they cannot move.

CheckCollisions()[source]

Goes through every pair exactly once, then checks their collisions and resolves them.

GetRestitution(a, b)[source]

Get the restitution needed for two rigidbodies, based on their combine function

Parameters:
Returns:

Restitution

Return type:

float

Step(dt)[source]

Steps through the simulation at a given delta time.

Parameters:dt (float) – Delta time to step

Notes

The simulation is stepped 10 times, so that it is more precise.

class pyunity.physics.core.Collider[source]

Bases: pyunity.core.Component

Collider base class.

AddComponent(component)

Calls AddComponent on the component’s GameObject.

Parameters:component (Component) – Component to add. Must inherit from Component
GetComponent(component)

Calls GetComponent on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
GetComponents(component)

Calls GetComponents on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
RemoveComponent(component)

Calls RemoveComponent on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
RemoveComponents(component)

Calls RemoveComponents on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
class pyunity.physics.core.Manifold(a, b, normal, penetration)[source]

Bases: object

Class to store collision data.

Parameters:
  • a (Collider) – The first collider
  • b (Collider) – The second collider
  • normal (Vector3) – The collision normal
  • penetration (float) – How much the two colliders overlap
class pyunity.physics.core.PhysicMaterial(restitution=0.75, friction=1)[source]

Bases: object

Class to store data on a collider’s material.

Parameters:
  • restitution (float) – Bounciness of the material
  • friction (float) – Friction of the material
restitution

Bounciness of the material

Type:float
friction

Friction of the material

Type:float
combine

Combining function. -1 means minimum, 0 means average, and 1 means maximum

Type:int
class pyunity.physics.core.Rigidbody[source]

Bases: pyunity.core.Component

Class to let a GameObject follow physics rules.

mass

Mass of the Rigidbody. Defaults to 100

Type:int or float
velocity

Velocity of the Rigidbody

Type:Vector3
physicMaterial

Physics material of the Rigidbody

Type:PhysicMaterial
position

Position of the Rigidbody. It is assigned to its GameObject’s position when the CollHandler is created

Type:Vector3
AddComponent(component)

Calls AddComponent on the component’s GameObject.

Parameters:component (Component) – Component to add. Must inherit from Component
AddForce(force)[source]

Apply a force to the center of the Rigidbody.

Parameters:force (Vector3) – Force to apply

Notes

A force is a gradual change in velocity, whereas an impulse is just a jump in velocity.

AddImpulse(impulse)[source]

Apply an impulse to the center of the Rigidbody.

Parameters:impulse (Vector3) – Impulse to apply

Notes

A force is a gradual change in velocity, whereas an impulse is just a jump in velocity.

GetComponent(component)

Calls GetComponent on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
GetComponents(component)

Calls GetComponents on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
Move(dt)[source]

Moves all colliders on the GameObject by the Rigidbody’s velocity times the delta time.

Parameters:dt (float) – Time to simulate movement by
MovePos(offset)[source]

Moves the rigidbody and its colliders by an offset.

Parameters:offset (Vector3) – Offset to move
RemoveComponent(component)

Calls RemoveComponent on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
RemoveComponents(component)

Calls RemoveComponents on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
class pyunity.physics.core.SphereCollider[source]

Bases: pyunity.physics.core.Collider

A spherical collider that cannot be deformed.

min

The corner with the lowest coordinates.

Type:Vector3
max

The corner with the highest coordinates.

Type:Vector3
pos

The center of the SphereCollider

Type:Vector3
radius

The radius of the SphereCollider

Type:Vector3
AddComponent(component)

Calls AddComponent on the component’s GameObject.

Parameters:component (Component) – Component to add. Must inherit from Component
CheckOverlap(other)[source]

Checks to see if the bounding box of two colliders overlap.

Parameters:other (Collider) – Other collider to check against
Returns:Whether they are overlapping or not
Return type:bool
GetComponent(component)

Calls GetComponent on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
GetComponents(component)

Calls GetComponents on the component’s GameObject.

Parameters:componentClass (Component) – Component to get. Must inherit from Component
RemoveComponent(component)

Calls RemoveComponent on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
RemoveComponents(component)

Calls RemoveComponents on the component’s GameObject.

Parameters:component (Component) – Component to remove. Must inherit from Component
SetSize(radius, offset)[source]

Sets the size of the collider.

Parameters:
  • radius (float) – The radius of the collider.
  • offset (Vector3) – Offset of the collider.
collidingWith(other)[source]

Check to see if the collider is colliding with another collider.

Parameters:other (Collider) – Other collider to check against
Returns:Collision data
Return type:Manifold or None

Notes

To check against another SphereCollider, the distance and the sum of the radii is checked.

To check against an AABBoxColider, the check is as follows:

  1. The sphere’s center is checked to see if it is inside the AABB.
  2. If it is, then the two are colliding.
  3. If it isn’t, then a copy of the position is clamped to the AABB’s bounds.
  4. Finally, the distance between the clamped position and the original position is measured.
  5. If the distance is bigger than the sphere’s radius, then the two are colliding.
  6. If not, then they aren’t colliding.
pyunity.physics.core.infinity = inf

A representation of infinity